首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >VCBuild任务在MSBuild中-更改输出路径

VCBuild任务在MSBuild中-更改输出路径
EN

Stack Overflow用户
提问于 2010-11-22 19:07:45
回答 3查看 3.2K关注 0票数 3

我正试图为我们的一个产品编写一个自动构建,并且我为我们的一些VC++项目设置了一个墙:我需要能够设置输出路径,以便在程序集完成后复制到哪里。

下面是一个临时的msbuild文件:

代码语言:javascript
复制
<Project DefaultTargets="Build"
         xmlns="http://schemas.microsoft.com/developer/msbuild/2003"
         ToolsVersion="3.5">
 <Target Name="Build">
   <VCBuild Projects="C:\src\SomeProject\SomeProject.vcproj"
            ToolPath="C:\Program Files\Microsoft Visual Studio 9.0\VC\vcpackages"
            Configuration="Debug" />
 </Target>
</Project>

Stijn的回答:

我想我应该用这个空间来说明我是如何用Stijn的答案来解决这个问题的。他的MSBuild文件中有一些代码为他编写vsprops文件。我决定采取一种更简单的方法,只需手动编写文件。

我创建了这个名为build.vsprops的文件(输出路径是V:)

代码语言:javascript
复制
<?xml version="1.0"?>
<VisualStudioPropertySheet ProjectType="Visual C++"
                           Version="8.00"
                           Name="Overrides"
                           OutputDirectory="V:\">
  <Tool Name="VCCLCompilerTool"
        AdditionalUsingDirectories="V:\" />
</VisualStudioPropertySheet>

然后,我编辑了我的MSBuild文件以添加覆盖参数:

代码语言:javascript
复制
<Project DefaultTargets="Build"
         xmlns="http://schemas.microsoft.com/developer/msbuild/2003"
         ToolsVersion="3.5">
 <Target Name="Build">
   <VCBuild Projects="C:\src\SomeProject\SomeProject.vcproj"
            ToolPath="C:\Program Files\Microsoft Visual Studio 9.0\VC\vcpackages"
            Configuration="Debug"
            Override="$(MSBuildProjectDirectory)\build.vsprops" />
 </Target>
</Project>
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-11-22 21:48:07

查看VCBuild任务的重写参数。基本上,您可以指定一个属性表,用于覆盖您想要的任何属性(它的效果与在VS中的项目中将属性表添加到列表顶部一样)。您甚至可以使用WriteLinesToFile任务生成覆盖文件。

示例:

代码语言:javascript
复制
<PropertyGroup>
  <VCOverridesFile Condition=" '$(VCOverridesFile)'=='' ">overrides.vsprops</VCOverridesFile>
  <VCOverridesOpen>%3C?xml version=%221.0%22?%3E%0D%0A%3CVisualStudioPropertySheet ProjectType=%22Visual C++%22 Version=%228.00%22 Name=%22My Overrides%22%3E</VCOverridesOpen>
  <VCOverridesClose>%3C/VisualStudioPropertySheet%3E</VCOverridesClose>
  <MyOutPath>&lt;Tool Name="VCLinkerTool" OutputFile ="c:\my.exe"/&gt;</MyOutPath>
</PropertyGroup>

<Target Name="WriteOverridesFile">
  <WriteLinesToFile
    File="$(VCOverridesFile)"
    Lines="$(VCOverridesOpen);$(AdditionalVCOverrides);$(VCOverridesClose)"
    Overwrite="true" />
</Target>

然后将$(VCOverridesFile)传递给重写属性,并确保您的VCBuild任务DependsOnTarget WriteOverridesFile。

票数 2
EN

Stack Overflow用户

发布于 2010-11-22 21:24:12

这样做很脏,可以通过msbuild的命令行参数传递输出目录路径。

代码语言:javascript
复制
msbuild yourProject /p:OutDir=yourPath

虽然我怀疑,应该有更好的方式来完成这项任务。其主要思想是设置“OutDir”属性,使其不会被SomeProject.vcproj覆盖。

票数 0
EN

Stack Overflow用户

发布于 2021-03-10 21:18:41

如果您正在使用Azure DevOps,并且需要创建YAML,请构建一个.net框架(年份)

代码语言:javascript
复制
- task: VSBuild@1
  inputs:
    solution: '**\*.sln'
    msbuildArgs: '/p:DeployOnBuild=true /p:SkipInvalidConfigurations=false /p:OutDir="$(System.DefaultWorkingDirectory)\publish_output"'
    platform: 'Any CPU'
    configuration: 'Release'
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4249221

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档