我有一个正在学习的简单 MSBuild 文件。
这里是:
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Clean" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup Label="Globals">
<ProjectGuid>{D5A16164-962E-4A6D-9382-240F31AB6C50}</ProjectGuid>
</PropertyGroup>
<Target Name="Clean">
<ItemGroup>
<BinFiles Include="bin\*.*" />
<fff Include="f\*.*" />
</ItemGroup>
<Delete Files="@(BinFiles)" />
<Delete Files="@(fff)" />
</Target>
</Project>
现在我想将它包含在 Visual Studio 解决方案中,并能够从 Visual Studio 2012 运行“干净”目标。我尝试将它命名为
testproject.msbuildproj
就像互联网似乎暗示“有效”一样,但它不起作用。当我运行 clean 命令时,我只会收到“意外错误”。如果我将项目重命名为
testproject.csproj
,它做了一些不直观的事情,比如创建编译目录,但它确实正确地运行了我的 clean 命令。但是,这是不可取的,因为它会创建 obj
和 bin/x86/debug
键入目录。它在 Visual Studio 中看起来也很傻,因为它仍然提供引用下拉列表。如何在没有随机错误或错误假设的情况下仅使用 Visual Studio 中的普通 MSBuild 项目?
注意我只是在 Visual Studio 中遇到了这个问题。从命令行使用 msbuild 可以完美运行
最佳答案
Visual Studio 在 时创建 bin/obj 文件夹打开 csproj 文件。当您单击 Build/Rebuild/Clean 时,它只使用项目文件中的适当目标。
您无法阻止 VS 创建这些文件夹,但您可以要求它通过设置适当的属性在临时文件夹中创建它们 - 引用 this MSDN article详情。
所以步骤是将您的项目重命名为 csproj
,并将以下几行添加到项目中:
<PropertyGroup>
<OutputPath>$(Temp)\bin</OutputPath>
<IntermediateOutputPath>$(Temp)\obj</IntermediateOutputPath>
</PropertyGroup>
我通常使用一些不同的方法来处理来自 VS 的 MSBUILD 文件:
csproj
已删除的文件 Import ... CSharp.targets
部分作为我的构建项目的纯容器。 Build
/Rebuild
目标在 csproj
我需要的任何文件,例如 Build 可能包含最小输出,而重建诊断一个。 像这样:
<Target Name="Build">
<Exec Command="%windir%\Microsoft.NET\Framework64\v4.0.30319\msbuild.exe Builds\build.proj /t:Build /v:m" />
</Target>
<Target Name="Rebuild">
<Exec Command="%windir%\Microsoft.NET\Framework64\v4.0.30319\msbuild.exe Builds\build.proj /t:Build /v:d" />
</Target>
关于visual-studio - 如何使用 Visual Studio 2012 中的 MSBuild 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16222370/