它引用了一个程序集(即Ionic.Zip.dll)。Ionic.Zip.dll不在GAC中(我也不希望它在GAC中)。它就在我的CustomTa">
我觉得我以前修复过这个问题,但我记不清是怎么修复的。
我有一个任务文件,看起来像这样(CustomTasks.tasks):
<UsingTask AssemblyFile="CustomTasks.dll" TaskName="MyCustomTask"/>
它引用了一个程序集(即Ionic.Zip.dll)。Ionic.Zip.dll不在GAC中(我也不希望它在GAC中)。它就在我的CustomTasks.dll旁边。
我有一个名为MSBuild的目录,这个目录比我的sln文件高一级,里面有CustomTasks.tasks、CustomTasks.dll和Ionic.Zip.dll。
我有一个引用任务文件并调用自定义任务的csproj:
<Import Project="$(ProjectDir)\..\MSBuild\CustomTasks.tasks" />
<MyCustomTask ..... />
在构建时,这会产生以下结果:
无法从程序集....MyCustomTasks.dll加载"MyCustomTask“任务。无法加载文件或程序集'Ionic.Zip,......‘或者它的一个依赖项。
发布于 2012-11-25 07:07:08
感到疲倦和沮丧,并采取了直接的方法……我不认为这是我解决问题的相同方式,previously...but也许这会对其他人有帮助。其他更优雅的解决方案也非常受欢迎。
<Target Name="BeforeBeforeBuild" BeforeTargets="BeforeBuild">
<HandleAssemblyResolve SearchPath="$(ProjectDir)\..\MSBuild\" />
</Target>
<UsingTask TaskName="HandleAssemblyResolve" TaskFactory="CodeTaskFactory" AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.v4.0.dll">
<ParameterGroup>
<SearchPath ParameterType="System.String" Required="true" />
</ParameterGroup>
<Task>
<Using Namespace="System" />
<Using Namespace="System.IO" />
<Using Namespace="System.Reflection" />
<Code Type="Fragment" Language="cs">
<![CDATA[
AppDomain.CurrentDomain.AssemblyResolve += (sender, e) =>
{
var assemblySearchPath = Path.Combine(SearchPath, e.Name.Split(',')[0]);
if (File.Exists(assemblySearchPath)) return Assembly.LoadFrom(assemblySearchPath);
return null;
};
]]>
</Code>
</Task>
</UsingTask>
发布于 2015-03-16 13:02:15
这实际上很容易修复。将您的自定义生成任务和依赖项放在不同的文件夹中。然后,依赖项被正确加载。
例如:
<UsingTask AssemblyFile="..\BuildTools\CustomTasks.dll" TaskName="MyCustomTask"/>
https://stackoverflow.com/questions/13548851
复制相似问题