如何指定要在 MSBuild 内联任务中使用的正确版本的程序集?

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# 应用程序中,我可以只使用程序集绑定重定向,但我不确定如何在此处引用正确的程序集。任何帮助表示赞赏!