【问题标题】:How do I use an MSBuild file from Visual Studio 2012?如何使用 Visual Studio 2012 中的 MSBuild 文件?
【发布时间】:2013-04-25 18:45:09
【问题描述】:

我正在学习一个简单的 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 命令。但是,这是不可取的,因为它会创建 objbin/x86/debug 类型的目录。它在 Visual Studio 中看起来也很愚蠢,因为它仍然提供引用下拉菜单。

如何在没有随机错误或错误假设的情况下仅使用 Visual Studio 中的普通 MSBuild 项目?

注意,我只是在 Visual Studio 中遇到了这个问题。从命令行使用 msbuild 可以完美运行

【问题讨论】:

    标签: visual-studio visual-studio-2012 msbuild build-automation


    【解决方案1】:

    Visual Studio 在打开 csproj 文件时创建 bin / obj 文件夹。当您单击 Build / Rebuild / Clean 时,它只使用项目文件中的适当目标。

    您无法阻止 VS 创建这些文件夹,但您可以通过设置适当的属性要求它在临时文件夹中创建它们 - 请参阅 this MSDN article 了解详细信息。

    因此步骤是将您的项目重命名为csproj,并将以下行添加到项目中:

    <PropertyGroup>
      <OutputPath>$(Temp)\bin</OutputPath>
      <IntermediateOutputPath>$(Temp)\obj</IntermediateOutputPath>
    </PropertyGroup>
    

    我通常使用一些不同的方法来处理来自 VS 的 MSBUILD 文件:

    • 我使用常规的csproj 文件,删除了Import ... CSharp.targets 部分作为构建项目的纯容器。
    • 我使用“包含在项目中”添加带有目标和逻辑的实际构建文件,以及所有属性、必要的工件(如 XSLT 等),因此我可以管理层次结构并从 VS.Net 中更改任何文件。
    • 我在csproj 文件中重新定义Build / Rebuild 目标以满足我的需要,例如构建可能包含最小输出,而重建诊断输出。

    像这样:

    <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>
    

    【讨论】:

    • @IAbstract 感谢您的反对。如果您仔细阅读问题If I rename the project to testproject.csproj ... it does actually run my clean command properly. However, this is undesireable because it creates obj and bin/x86/debug type directories 我描述了一种如何在没有 bin/obj 工件的情况下从 msbuild 项目运行 Clean/Build/Rebuild 的方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-26
    • 2016-10-16
    • 2013-03-03
    • 2013-04-17
    • 2012-09-13
    • 1970-01-01
    • 2014-03-23
    相关资源
    最近更新 更多