【问题标题】:Working directory issue when importing msbuild file in another msbuild file将 msbuild 文件导入另一个 msbuild 文件时的工作目录问题
【发布时间】:2011-09-28 09:46:56
【问题描述】:

我正在尝试通过扩展现有的 msbuild 文件(网络应用程序 .csproj 文件)为 msbuild 文件指定一些额外的目标/任务。这个想法是将配置特定的任务放在这个“扩展的 ms 构建文件”中,并在我们的构建服务器 (TeamCity) 中使用这个文件。我最初尝试解决的方法是在我的 Web 项目中添加一个文件夹“msbuildscripts”并将扩展的 ms 构建文件放在那里:

<?xml version="1.0" encoding="utf-8" ?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" DefaultTargets="Build">
  <Import Project="../My.Web.csproj" />
  ...more stuff...
</Project>

然后使用类似的东西构建这个文件:

c:\myweb\msbuild.exe msbuildscripts/extended.msbuild.file.xml

现在,这将不起作用,因为在导入原始 ms 构建文件时,该 csproj 文件将在“错误”文件夹 (msbuildscripts) 中“执行”,并且 csproj-build-file 找不到任何它引用的文件夹/项目。

有没有办法告诉 msbuild.exe 使用特定的工作目录?我知道可以使用执行任务来解决这个问题,但这似乎不是一个好的解决方案。

【问题讨论】:

    标签: msbuild import path csproj


    【解决方案1】:

    像这样使用 MSBuild 任务:

    <Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" DefaultTargets="MyBuild">
    
    <ItemGroup>
     <ProjectToBuild Include="../My.Web.csproj" />
    </ItemGroup>
    
    <Target Name="MyBuild">
     <MSBuild Targets="Build" Projects="@(ProjectToBuild)"></MSBuild>
    </Target>
    </Project>
    

    【讨论】:

    • 工作正常,但我使用“ProjectReference”而不是“ProjectToBuild”,因为该元素在架构中,但似乎两个选项都有效。
    • 任何适用于xml标签的标识符在这里都是完全有效的,如果它不在模式中也没关系。它仅在专有 csproj 文件的模式中。 msdn.microsoft.com/en-us/library/646dk05y.aspx,我不建议重用它,因为它在智能模式中。
    猜你喜欢
    • 1970-01-01
    • 2014-03-04
    • 1970-01-01
    • 2021-08-17
    • 1970-01-01
    • 2021-09-23
    • 1970-01-01
    • 1970-01-01
    • 2018-04-24
    相关资源
    最近更新 更多