"无法找到类型或命名空间名称"

时间:2017-11-09 09:28:55

标签: 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中,我有一个项目参考列表,例如:

<ProjectReference Include="..\SubFolder1\SubFolder2\SubFolder3\ProjectReference1.csproj">
  <Project>{A3DBEB8E-997D-4F88-A56C-B45647EB5C29}</Project>
  <Name>ProjectReference1</Name>
  <Private>False</Private>
</ProjectReference>
<ProjectReference Include="..\SubFolder1\SubFolder2\ProjectReference2.csproj">
  <Project>{8bd1049a-afe2-44c1-8ecc-020000ec13ab}</Project>
  <Name>ProjectReference2</Name>
  <Private>False</Private>
</ProjectReference>

当我运行命令MSBuild.exe C:\Workspaces\MyProject.csproj /t:build时,我看到了一长串错误消息,如下所示:

File1.cs(27,79): error CS0246: The type or namespace name 'Type1' could no
t be found (are you missing a using directive or an assembly reference?) [C:\Workspaces\MyProject.csproj]

Type1在我的.csproj文件中包含的一个项目引用中定义。

为什么MSBuild会抛出这些错误,即使我已指定References任务中的CSC字段应包含项目引用?我该怎么做才能确保我的项目成功构建?

1 个答案:

答案 0 :(得分:1)

您可以将Build Target定义为仅调用Csc。 Csc任务只是csc.exe的一个包装器,它的引用属性是csc.exe的/reference选项,它需要程序集:对msbuild文件的ProjectReference并不意味着任何东西它。您必须首先构建这些项目,并将其输出程序集传递给Reference属性。这基本上是由Visual Studio创建的正确项目文件为您自动完成的(它首先构建ProjectReferences - 如果过期 - ,确定输出程序集是什么,将其添加到引用),所以我&#39; d建议你用它作为起点。