MSBuild在任务中引用DLL

时间:2013-04-24 02:03:02

标签: visual-studio-2012 msbuild msbuild-task msbuild-4.0

我在.csproj文件中定义了以下内联任务,该文件应运行BeforeBuild。

<UsingTask TaskName="VersioningTask" TaskFactory="CodeTaskFactory" AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.v4.0.dll">
<ParameterGroup>
    <FileName ParameterType="System.String" Required="true" />
    <XmlFileName ParameterType="System.String" Required="true" />
</ParameterGroup>
<Task>
    <Reference Include="System.Xml.dll" />
    <Reference Include="System.Xml.Linq.dll"/>
    <Using Namespace="System" />
    <Using Namespace="System.IO" />
    <Using Namespace="System.Linq" />
    <Using Namespace="System.Text" />
    <Using Namespace="System.Text.RegularExpressions" />
    <Using Namespace="System.Xml.Linq" />
    <Code Type="Fragment" Language="cs"><![CDATA[
        var xDoc = XDocument.Load(XmlFileName);
        //...

从VS2012构建项目时,我收到以下错误:

  

无法找到引用&#34; System.Xml.dll&#34;。如果您的代码需要此引用,则可能会出现编译错误。

     

无法找到参考&#34; System.Xml.Linq.dll&#34;。如果您的代码需要此引用,则可能会出现编译错误。

如果我删除XML内容和两个引用,则构建成功。 我试图使用DLL的完整路径(%windir%/ assembly)而没有任何成功。

这里的任何想法都是错误的。

2 个答案:

答案 0 :(得分:10)

引用System.Xml.Linq时,我遇到了同样的问题。切换到已编译的任务确实解决了您的解决方案,但是要将原始代码实现为内联任务,只需从引用中删除文件扩展名,然后删除内联任务,以便引用根命名空间而不是文件名。

改变这个:

<Reference Include="System.Xml.dll" />
<Reference Include="System.Xml.Linq.dll"/>

阅读:

<Reference Include="System.Xml" />
<Reference Include="System.Xml.Linq"/>

答案 1 :(得分:-1)

通过使用常规任务而不是使用内联任务来解决它。