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