未找到引用的元数据文件

时间:2017-11-08 14:00:26

标签: c# visual-studio-2015 msbuild

我使用MSBuild版本14.0。

根据文档here,我定义了我自己的Build任务,如下所示:

<Target Name="Build" 
        Inputs="@(Compile)"
        Outputs="MyLibrary.dll">

        <Csc 
            Sources="@(Compile)"
            Resources="@(EmbeddedResource)" 
            References="@(Reference);@(ProjectReference)" 
            OutputAssembly="MyLibrary.dll"/>
</Target> 

在我的一个ItemGroup中,我添加了以下引用:

<Reference Include="System" />
<Reference Include="System.Core">
  <RequiredTargetFramework>3.5</RequiredTargetFramework>
</Reference>
<Reference Include="System.Runtime.Serialization" />
<Reference Include="System.Xml" />

但是,由于这些错误,构建失败:

CSC : error CS0006: Metadata file 'System' could not be found [C:\MyLibrary.csproj]
CSC : error CS0006: Metadata file 'System.Core' could not be found C:\MyLibrary.csproj]
CSC : error CS0006: Metadata file 'System.Runtime.Serialization' could not be found [C:\MyLibrary.csproj]
CSC : error CS0006: Metadata file 'System.Xml' could not be found [C:\MyLibrary.csproj]

我该如何解决这个问题?

编辑:我认为MSBuild抛出了该错误,因为上面错误消息中提到的所有DLL都位于C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6\,而不是在包含.csproj的文件夹中文件。我不希望将这些引用复制并粘贴到我的项目文件夹中。我该怎么做才能确保正确定位这些DLL?

1 个答案:

答案 0 :(得分:1)

  

我该怎么做才能确保正确找到这些DLL?

在仔细检查文档How to: Build Incrementally之后,我发现我们应该在这些引用中包含文件类型后缀.dll,否则,Csc.exe编译器找不到这些文件。所以你ItemGroup应该是:

  <ItemGroup>
    <Reference Include="System.dll" />
    <Reference Include="System.Core.dll">
      <RequiredTargetFramework>3.5</RequiredTargetFramework>
    </Reference>
    <Reference Include="System.Runtime.Serialization.dll" />
    <Reference Include="System.Xml.dll" />
  </ItemGroup>

enter image description here