Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to solve: Custom MSBuild task requires assembly outside of AppBase

I have a custom Task that I want to execute when building my C# projects. This task is located in MyTask.dll, which references another assembly, MyCommon.DLL.

The problem is that MyCommon.dll is located at "..\Common\MyCommon.dll" relative to MyTask.dll, which puts it outside the AppBase dir for MSBuild process. I've confirmed that this is indeed the problem by analyzing MSBuild's log and seeing Fusion's report about the binding failure.

What can I do to make Fusion find MyCommon.dll during the build process? Note that moving the assembly would break my app, which also depends on it.

UPDATE: Well, it seems I'll go with using a copy afterall. Other solutions all require system-wide modifications, which isn't really warranted here.

like image 345
aoven Avatar asked Mar 27 '09 16:03

aoven


2 Answers

So copy it instead? Just a thought. Have a copy there just to support the build that you delete once you're done with it.

like image 99
David M Avatar answered Oct 04 '22 14:10

David M


I see multiple solutions :

1st : Add the assembly in the GAC (your assembly must have a strong name)

gacutil /I <assembly name> 

2nd : Locate the assembly through Codebases or Probing, in your machine.config file or in msbuild.exe.config .

<configuration>
   <runtime>
      <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
         <dependentAssembly>
            <assemblyIdentity name="MyCommon"
                              publicKeyToken="32ab4ba45e0a69a1"
                              culture="neutral" />
            <codeBase version="2.0.0.0"
                      href="file://C:/yourpath/MyCommon.DLL"/>
         </dependentAssembly>
      </assemblyBinding>
   </runtime>
</configuration>

3rd : copy the assembly in the same directory before and delete it after, like David M said.

like image 22
Julien Hoarau Avatar answered Oct 04 '22 13:10

Julien Hoarau