Ci3*_*Ci3 5 .net c# msbuild assemblies
我在 MSBuild 项目中编写了一个内联 C# 任务。我遇到了一些问题,因为我需要加载的程序集引用了旧版本的 .NET 框架中的类型。我应该如何让 MSBuild 引用正确的程序集版本?
这是一些代码:
<UsingTask TaskName="HelloWorld" TaskFactory="CodeTaskFactory" AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.v4.0.dll">
<ParameterGroup>
<ConfigFile ParameterType="System.String" Required="true" />
<Environment ParameterType="System.String" Required="true" />
</ParameterGroup>
<Task>
<Reference Include="System.Xml"/>
<Reference Include="Microsoft.Build"/>
<Reference Include="Microsoft.Build.Framework"/>
<Reference Include="$(MSBuildCommunityTasksPath)\MSBuild.Community.Tasks.dll"/>
<Reference Include="Microsoft.Build.Utilities.v3.5, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL"/>
<Using Namespace="System"/>
<Using Namespace="System.Xml"/>
<Using Namespace="Microsoft.Build.Utilities"/>
<Using Namespace="Microsoft.Build.Framework"/>
<Using Namespace="MSBuild.Community.Tasks.Xml"/>
<Code Type="Fragment" Language="cs">
<![CDATA[
//obtain a list of environment nodes in the substitution config
XmlDocument doc = new XmlDocument();
doc.Load(ConfigFile);
List<String> envList = doc.DocumentElement.SelectNodes("//environments/*").Cast<XmlNode>().Select(x => x.Name).ToList();
//envList.ForEach(Console.WriteLine);
]]>
</Code>
</Task>
</UsingTask>
Run Code Online (Sandbox Code Playgroud)
不管 CDATA 块中有什么,我想添加更多使用 MSBuild.Community.Tasks 的内容。
不幸的是,在尝试构建后,我收到以下错误:
错误:错误 MSB3758:编译期间发生错误。c:\Users\charris\AppData\Local\Temp\i1wmm4q1.0.cs(24,57):错误 CS0433:类型“Microsoft.Build.Utilities.Task”存在于“c:\Windows\Microsoft.NET”中\assembly\GAC_MSIL\Microsoft.Build.Utilities.v4.0\v4.0_4.0.0.0__b03f5f7f11d50a3a\Microsoft.Build.Utilities.v4.0.dll'和'c:\Windows\assembly\GAC_MSIL\Microsoft.Build。 Utilities.v3.5\3.5.0.0__b03f5f7f11d50a3a \Microsoft.Build.Utilities.v3.5.dll'
因此,据我所知,MSBuild 社区任务依赖于“Microsoft.Build.Utilities.Task”类型,但我的应用程序域中加载了两个版本的“Microsoft.Build.Utilties”。在普通的 C# 应用程序中,我可以只使用程序集绑定重定向,但我不确定如何在此处引用正确的程序集。任何帮助表示赞赏!