如何让Visual Studio 2010将变量传递给MSBuild?

时间:2012-01-04 19:52:34

标签: visual-studio msbuild

我已经构建了一个自定义的msbuild deploy.targets文件,该文件允许我将生成的二进制文件发布到我在命令行中指定的目录。这意味着如果我跑

$> msbuild / p:DestServer = \ myserver \ final-dest

然后我的项目将被编译,生成的* .dll将被复制到一个临时实例 - 在这种情况下是myserver上的目录final-dest。我想要这个功能,因为当我进行良好的编译时,我想在该目录中获得* .dll的副本,但我也希望它们是本地的。

这是我的问题 - 我真的不想从命令行发出这个问题。当我选择Release Build Configuration(项目|属性|构建)时,我希望能够指定/ p:DestServer = \ myserver \ final-dest作为msbuild将使用的参数,因为它会执行正常构建

我在哪里指定这个?

在项目属性中|构建事件,我可以指定预构建或后构建事件 - 但这不是“构建”事件的一部分吗?

理想情况下,如果有人可以在Visual Studio 2010中给我菜单序列,我会很感激。

2 个答案:

答案 0 :(得分:4)

如果您不想编辑项目文件 - 还有另一种解决方案。

每个* .csproj文件都包含:<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />

在我的电脑和.Net 4.0上,此文件位于"C:\Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.CSharp.targets"

PropertyGroup内添加新的Project,如:

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
...
 <PropertyGroup>  
    <DestServer>\myserver\final-dest</DestServer>
  </PropertyGroup>
...
<!-- a lot of stuff -->
...
</Project>

现在所有的构建(来自MSBuild和Visual Studio)都将使用此属性,因此您无需修改​​.csproj或从命令行传递args

<强>更新

这是一种快速而肮脏的方式,因为它将覆盖该PC上构建的所有项目。 只有这样做,如果有很多项目并且你没有权限修改它们

通常,您只需在单个项目中添加新的PropertyGroup

如果您需要此变量的项目很多,则可以创建并导入自定义扩展目标 bellow 默认目标:

  

App1.csproj

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
...
  <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
  <Import Project="..\myCustom.targets" />
...
</Project>

  

myCustom.targets

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>  
    <DestServer>\myserver\final-dest</DestServer>
  </PropertyGroup>
</Project>

答案 1 :(得分:1)

我不知道通过VisualStudio GUI设置此方法(可能没有),但您应该能够编辑.csproj / .vcproj文件以将该属性添加到适当的配置:

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
    <ProductVersion>9.0.30729</ProductVersion>
    ...
    ...etc
    ...
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
    <DestServer>\myserver\final-dest</DestServer>   <!-- <<<<< HERE <<<<< -->
    ...

即使您通过GUI编辑其他属性,Visual Studio也会保留此功能(至少倾向于 ...)