如何在Visual Studio 2012中使用MSBuild文件?

4

我有一个简单的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运行“clean”目标。我尝试将其命名为testproject.msbuildproj,就像互联网上似乎建议的那样“有效”,但它不起作用。当我运行清理命令时,我只得到“意外错误”。
如果我将项目重命名为testproject.csproj,它会做出一些不直观的事情,比如创建编译目录,但它确实可以正确地运行我的清理命令。然而,这是不可取的,因为它会创建objbin/x86/debug类型的目录。在Visual Studio中看起来也很怪异,因为它仍然给出了“引用”下拉菜单。
如何在没有随机错误或错误假设的情况下只使用纯香草MSBuild项目?注意,我只在从Visual Studio进行此操作时遇到问题。使用命令行中的msbuild完全正常。
1个回答

2
Visual Studio在打开csproj文件时会创建bin/obj文件夹。当您单击“生成/重新生成/清理”时,它只是使用项目文件中的适当目标。
您无法阻止VS创建这些文件夹,但可以要求它将它们创建在临时文件夹中,通过设置适当的属性 - 有关详细信息,请参阅此MSDN文章
因此,步骤是将您的项目重命名为csproj,并将以下行添加到项目中:
<PropertyGroup>
  <OutputPath>$(Temp)\bin</OutputPath>
  <IntermediateOutputPath>$(Temp)\obj</IntermediateOutputPath>
</PropertyGroup>

我通常使用一种有些不同的方法来处理MSBUILD文件:
  • 我使用普通的csproj文件,移除了Import ... CSharp.targets部分,作为我的构建项目的纯容器。
  • 我添加实际的构建文件、目标和逻辑,以及所有必要的属性、工件(如XSLT等),使用“包含到项目”功能,这样我就可以在VS.Net中管理层次结构并更改任何文件。
  • 我重新定义csproj文件中的Build/Rebuild目标,以满足我的需要,例如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>

这似乎并没有真正回答问题:“如何……”您建议在VS中设置MSBuild执行,但您并没有回答如何从VS中执行MSBuild。 - IAbstract
@IAbstract 感谢您的点踩。如果您仔细阅读问题,我描述了一种如何从msbuild项目中运行Clean / Build / Rebuild而不使用bin / obj构件的方法,“如果我将项目重命名为testproject.csproj…它实际上可以正确运行我的清理命令。但是,这是不可取的,因为它会创建obj和bin / x86 / debug类型的目录”。 - Lanorkin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接