gpt4 book ai didi

MSBuild 使用任务解析引用

转载 作者:行者123 更新时间:2023-12-03 01:27:44 25 4
gpt4 key购买 nike

我觉得我以前已经解决过这个问题,但我不记得是如何解决的。

我有一个如下所示的任务文件(CustomTasks.tasks):

<UsingTask AssemblyFile="CustomTasks.dll" TaskName="MyCustomTask"/>

它引用一个程序集(即 Ionic.Zip.dll)。 Ionic.Zip.dll 不在 GAC 中(我也不希望它在 GAC 中)。它位于我的 CustomTasks.dll 旁边。

我的 sln 文件上有一个名为 MSBuild 的目录,其中包含 CustomTasks.tasks、CustomTasks.dll 和 Ionic.Zip.dll。

我有一个引用任务文件并调用自定义任务的 csproj:

<Import Project="$(ProjectDir)\..\MSBuild\CustomTasks.tasks" />

<MyCustomTask ..... />

在构建时,会产生:

无法从程序集 ....MyCustomTasks.dll 加载“MyCustomTask”任务。无法加载文件或程序集“Ionic.Zip,......”或其依赖项之一。

最佳答案

感到疲倦和沮丧,并采取了直接的方法...我认为这与我之前解决问题的方式不同...但也许这会对其他人有所帮助。我们非常欢迎其他更优雅的解决方案。

  <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>

关于MSBuild 使用任务解析引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13548851/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com