我有一个自定义任务,我想在构建我的C#项目时执行它。此任务位于MyTask.dll中,该文件引用另一个程序集MyCommon.DLL。
问题是MyCommon.dll位于相对于MyTask.dll的“.. \ Common \ MyCommon.dll”,它将它置于AppBase目录之外,用于MSBuild进程。我已经通过分析MSBuild的日志并看到Fusion关于绑定失败的报告确认这确实是问题。
如何让Fusion在构建过程中找到MyCommon.dll?请注意,移动程序集会破坏我的应用程序,这也取决于它。
更新:嗯,似乎我会继续使用副本。其他解决方案都需要系统范围的修改,这在这里并不是真的有必要。
答案 0 :(得分:2)
那么复制它呢?只是一个想法。在那里有一个副本只是为了支持你完成后删除的构建。
答案 1 :(得分:1)
我看到多种解决方案:
1st:在GAC中添加程序集(程序集必须具有强名称)
gacutil /I <assembly name>
第二名:在Codebases or Probing文件或msbuild.exe.config
中通过machine.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>
第3名将程序集复制到同一目录中,之后将其删除,就像David M所说的那样。
答案 2 :(得分:0)
一个选项是使用ILMerge将依赖项合并到任务程序集中。
答案 3 :(得分:-1)
所有这些“解决方案”都会产生更多依赖性,从而使环境变得复杂。应该有一种更简单的方法来在运行时更新探测路径。
具体来说,MSBuild应该允许您在.proj文件中添加探测路径,或者指定依赖的dll
您可以定义自定义UsingTask:
<UsingTask TaskName="Task" AssemblyFile="Assembly.dll" />
但你不能添加依赖项?它应该被包含在......这里有类似
的东西<UsingTask TaskName="Task" AssemblyFile="Assembly.dll">
<DependantAssembly AssemblyFile="dependant.dll"/>
</UsingTask>
但是,不支持这个......