visual-studio - 如何使用 Visual Studio 2012 中的 MSBuild 文件?

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

我有一个正在学习的简单 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 在 时创建 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部分作为我的构建项目的纯容器。
  • 我使用“包含到项目中”添加具有目标和逻辑的实际构建文件,以及所有属性、必要的工件(如 XSLT 等),因此我可以管理层次结构并从 VS.Net 中更改任何文件。
  • 我重新定义 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/

    相关文章:

    c++ - 如何在 visual studio 中显示模板的静态类成员?

    c# - 在 View 中允许可空模型

    c# - Foreach 所有表单上的每个控件

    azure - 安装 Azure SDK 1.8 时,云模板不会安装在 VS2012 中

    linux - 如何在 MSBuild 中获取当前操作系统?

    .net - 将 MSBuild 批处理任务输出添加为项目元数据

    msbuild - 我应该如何构建我的 MSBuild 脚本

    c - Windows 中 CMake 的默认生成器是什么?

    visual-studio-2012 - TFS 2012 Power Tools 可以与 TFS 2010 一起使用吗?

    java - IntelliJ 中 Java 的 Visual Studio 后构建脚本等效项