我遇到了 MSBuild
的问题我自己无法克服它。因此,我依靠社区的智慧。
真实情况我遇到了问题
我有一个包含多个项目的解决方案文件,这些项目依赖于同一解决方案中的其他项目。我想将自定义目标附加到项目的 csproj 文件之一并从命令行构建它。它将允许我为此项目制作所有必要的输出二进制文件,以便在构建自定义目标期间进行进一步处理。但最主要的是我不知道该怎么做,谷歌搜索也无济于事。
简化
为了让事情更简单,我决定创建一个新的 C# 控制台项目,在项目文件中添加一个简单的自定义目标并尝试构建它。还是没有成功!这是我到目前为止所做的:
<Target Name="SampleTarget">
<Message Text="This is a SampleTarget" />
</Target>
%windir%\Microsoft.NET\framework\v3.5\msbuild.exe app.sln /t:coreapp:SampleTarget
甚至
%windir%\Microsoft.NET\framework\v3.5\msbuild.exe app.sln /t:coreapp.csproj:SampleTarget
结果
不走运,面临错误
MSB4057: The target "coreapp.csproj:SampleTarget" does not exist in the project.
我怀疑
MSBuild
认为一些与我希望它思考的根本不同的东西......除此之外,我还尝试在同一命令行上设置环境变量 MSBuildEmitSolution=1 以强制 msbuild 转储它在处理解决方案时创建的临时解决方案文件。在这个文件中,确实没有这样的目标。但是我想这不是原因,因为我要求 msbuild 在目标 SampleTarget 真正驻留的地方构建 coreapp.proj 。
问题是如何使用解决方案文件在这个简化的场景中构建 SampleTarget,因为它可能包含包含此 SampleTarget 目标的项目的依赖项?
对于进一步调查的任何形式的帮助或解雇,我将不胜感激!
最佳答案
您可以尝试创建一个新的独立 msbuild 文件,而不是在您的项目文件中插入自定义目标,该文件将:
例如,称之为 app-custom-Debug.msbuild 。
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<WorkingFolder>$(MSBuildProjectDirectory)</WorkingFolder>
<Configuration>Debug</Configuration>
<SolutionFile>app.sln</SolutionFile>
</PropertyGroup>
<Target Name="Build" DependsOnTargets="Compile" />
<Target Name="Compile">
<Message Text="=== COMPILING $(Configuration) configuration ===" />
<MSBuild Projects="$(SolutionFile)"
Properties="Configuration=$(Configuration)" />
</Target>
<Target Name="SampleTarget">
<Message Text="This is a SampleTarget" />
</Target>
</Project>
然后你执行:
msbuild.exe app-custom-Debug.msbuild /t:SampleTarget
关于msbuild - 如何使 MSBuild 构建在 csproj 构建 sln 中指定的自定义目标?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8404114/