如何解决:自定义MSBuild任务需要应用平台之外组装
-
22-08-2019 - |
题
我有,我想我的构建C#项目时,执行自定义任务。此任务位于MyTask.dll,它引用另一个组件,MyCommon.DLL。
的问题是,MyCommon.dll位于“.. \普通\ MyCommon.dll”相对于MyTask.dll,这使它的应用平台dir来MSBuild的过程之外。我已经确认这确实是通过分析的MSBuild的日志,看到融合的有关绑定失败报告的问题。
我能做些什么,使融合在构建过程中找到MyCommon.dll?请注意,移动所述组件将打破我的应用程序,这也依赖于它。
更新:嗯,看来我将使用一个副本毕竟去。其他解决方案都需要全系统的修改,这是不是真的在这里保证。
解决方案
所以复制它呢?只是一个想法。有一个副本那里只是为了支持您删除一旦你用它做的构建。
其他提示
我看到多个解决方案:
1 添加该组件在GAC(您的程序集必须有一个强名称)
gacutil /I <assembly name>
<强>第二强>找到该组件通过代码库或探测,在的machine.config 一>文件或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>
<强>第三:复制的组件中之前相同的目录和之后将其删除,像大卫中号说
这是一种选择是使用 ILMerge 以合并依赖到任务组件。
所有这些“解决方案”的创建多个依赖关系所处的环境复杂化。应该有更新在运行时探测路径更简单的方法..
具体的MSBuild应允许您在.proj文件添加探测路径,或指定依赖DLL
可以定义定制UsingTask:
<UsingTask TaskName="Task" AssemblyFile="Assembly.dll" />
但你不能添加依赖?它应包括......这里的东西,如
<UsingTask TaskName="Task" AssemblyFile="Assembly.dll">
<DependantAssembly AssemblyFile="dependant.dll"/>
</UsingTask>
但是,不,这不是支持...
不隶属于 StackOverflow