Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Release configuration merge gives error failed to resolve assembly #26

Open
chiragknzariya opened this issue Sep 22, 2020 · 11 comments
Open

Comments

@chiragknzariya
Copy link

chiragknzariya commented Sep 22, 2020

Hello @ravibpatel

I have created a new C# project and used ILRepack.Lib.MSBuild.Task.2.0.18.1 and added below code in my project .csproj file and it works absolutely fine, but when I add earlybound class file ([assembly: Microsoft.Xrm.Sdk.Client.ProxyTypesAssemblyAttribute()]) to my project It gives below error.

What do you think could be the problem? Can you please share the solution of the problem?

<Import Project="..\packages\ILRepack.Lib.MSBuild.Task.2.0.18.1\build\ILRepack.Lib.MSBuild.Task.targets" Condition="Exists('..\packages\ILRepack.Lib.MSBuild.Task.2.0.18.1\build\ILRepack.Lib.MSBuild.Task.targets')" /> <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild"> <PropertyGroup> <ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText> </PropertyGroup> <Error Condition="!Exists('..\packages\ILRepack.Lib.MSBuild.Task.2.0.18.1\build\ILRepack.Lib.MSBuild.Task.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\ILRepack.Lib.MSBuild.Task.2.0.18.1\build\ILRepack.Lib.MSBuild.Task.targets'))" /> </Target>

1> D365.Plugins -> C:\Users\admin\source\repos\D365.Plugins\D365.Plugins\bin\Release\D365.Plugins.dll
1> Added assembly 'bin\Release\Microsoft.Crm.Sdk.Proxy.dll'
1> Added assembly 'bin\Release\microsoft.identitymodel.dll'
1> Added assembly 'bin\Release\Microsoft.ServiceBus.dll'
1> Added assembly 'bin\Release\Microsoft.Xrm.Client.CodeGeneration.dll'
1> Added assembly 'bin\Release\Microsoft.Xrm.Client.dll'
1> Added assembly 'bin\Release\Microsoft.Xrm.Portal.dll'
1> Added assembly 'bin\Release\Microsoft.Xrm.Portal.Files.dll'
1> Added assembly 'bin\Release\Microsoft.Xrm.Sdk.Deployment.dll'
1> Added assembly 'bin\Release\Microsoft.Xrm.Sdk.dll'
1> Merging 9 assembies to 'bin\Release\D365.Plugins.dll'
1>C:\Users\admin\source\repos\D365.Plugins\packages\ILRepack.Lib.MSBuild.Task.2.0.18.1\build\ILRepack.Lib.MSBuild.Task.targets(19,5): error : Failed to resolve assembly: 'Microsoft.Xrm.Sdk, Version=9.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

@chiragknzariya
Copy link
Author

Awaiting for your response @ravibpatel

@ravibpatel
Copy link
Owner

You can try manually providing targets file this way you can manually add all the assemblies you want to merge. You can do it as shown here.

@chiragknzariya
Copy link
Author

chiragknzariya commented Sep 25, 2020

Thanks for your response @ravibpatel.

I have already used your example targets file and provided manually in project.

ILRepack.targets

Still it complaints for the same.

@ravibpatel
Copy link
Owner

You can try adding binding redirects as shown in this article. Also, I don't see "Microsoft.Xrm.Sdk.dll" in targets file which should contain the "Microsoft.Xrm.Sdk". If it still doesn't work then embedding may work better than merging in this case. You can try Costura.Fody to embed dll's inside your executable.

@icnocop
Copy link

icnocop commented Jun 11, 2021

I'm able to reproduce this issue using the code in this repo:
https://github.com/icnocop/ILRepackBug

  1. Clone repo
  2. Open ConsoleApp.sln in Visual Studio 2019
  3. Build

Notice the build fails with the following output:

...
1>Target Build:
1>Target ILRepacker:
1>  Using "ILRepack" task from assembly "C:\Users\username\.nuget\packages\ilrepack.lib.msbuild.task\2.0.18.2\build\ILRepack.Lib.MSBuild.Task.dll".
1>  Task "ILRepack"
1>    Added assembly 'bin\Debug\net472\ClassLibrary.dll'
1>    Added assembly 'bin\Debug\net472\Microsoft.Practices.EnterpriseLibrary.Common.dll'
1>    Added assembly 'bin\Debug\net472\Microsoft.Practices.EnterpriseLibrary.Logging.dll'
1>    Merging 3 assembies to 'bin\Debug\net472\\ConsoleApp.dll'
1>    E:\github\icnocop\ILRepackBug\ConsoleApp\ILRepack.targets(9,9): error : Failed to resolve assembly: 'Microsoft.Practices.EnterpriseLibrary.Common, Version=6.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'
1>  Done executing task "ILRepack" -- FAILED.
1>Done building target "ILRepacker" in project "ConsoleApp.csproj" -- FAILED.
1>
1>Done building project "ConsoleApp.csproj" -- FAILED.
1>
1>Build FAILED.

Any ideas?

Thank you.

@IvayloD
Copy link

IvayloD commented Sep 19, 2021

+1 ☝️ Experiencing the exact same issue

@HughJeffner
Copy link

I had a similar problem trying to merge Newtonsoft.Json.dll when using a property attribute (removing the attribute allowed the merge). My solution was to add LibraryPath="$(OutputPath)" to the ILRepack element in the ILRepack.targets file

@andy840119
Copy link

Same issue here.
It will pack the dlls not listed in the InputAssemblies.

@TomT15
Copy link

TomT15 commented Sep 26, 2022

I am now experiencing this issue that was originally stated. I have two items in my ItemGroup
<ItemGroup> <InputAssemblies Include="$(OutputPath)Newtonsoft.Json.dll" /> <InputAssemblies Include="$(OutputPath)Pricing_Plugin.dll" /> </ItemGroup>

but i see all 13 .dll files being merged.
image

It was working before and now all of a sudden im having issues with getting my Microsoft.Xrm.Sdk to work

Error:
Failed to resolve assembly: 'Microsoft.Xrm.Sdk, Version=9.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'

@chocataw
Copy link

chocataw commented Jan 29, 2023

I had this issue and I believe the fix was adding an inputassemblies reference in ILRepack.targets. Please note the expandable ReferencePathWithRefAssemblies inclusion. Just add the file name and exclude the .dll (file type).
This fix was taken from https://www.meziantou.net/merging-assemblies-using-ilrepack.htm

  <ItemGroup>
      <InputAssemblies Include="$(TargetPath)"/>
      <InputAssemblies Include="@(ReferencePathWithRefAssemblies)" Condition="'%(filename)' == 'Newtonsoft.Json'" />
      <InputAssemblies Include="@(ReferencePathWithRefAssemblies)" Condition="'%(filename)' == 'Microsoft.Xrm.Sdk.Workflow'" />
      <InputAssemblies Include="@(ReferencePathWithRefAssemblies)" Condition="'%(filename)' == 'Microsoft.Xrm.Sdk'" />
      <InputAssemblies Include="@(ReferencePathWithRefAssemblies)" Condition="'%(filename)' == 'Microsoft.Crm.Sdk.Proxy'" />
      <InputAssemblies Include="$(OutputPath)\MyAssembly.dll" />
    </ItemGroup>

@DarkDaskin
Copy link

DarkDaskin commented Mar 26, 2024

In my case (.NET Standard 2.0 library) I had to specify LibraryPath like this:

<?xml version="1.0" encoding="utf-8" ?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

  <Target Name="ILRepacker" AfterTargets="Build">
    <ItemGroup>
      <InputAssemblies Include="$(TargetPath)"/>
      <InputAssemblies Include="@(ReferencePathWithRefAssemblies)" Condition="'%(filename)' == 'IndexRange'" />
      <LibraryPath Include="%(ReferencePathWithRefAssemblies.RelativeDir)" />
    </ItemGroup>

    <ILRepack
      AllowDuplicateResources="false"
      DebugInfo="true"
      Internalize="true"
      InputAssemblies="@(InputAssemblies)"
      LibraryPath="@(LibraryPath)"
      OutputFile="$(TargetPath)"
      Parallel="true"
      TargetKind="SameAsPrimaryAssembly" />
  </Target>
</Project>

This way I do not need to have NuGet dependencies to be copied to the output directory.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

9 participants