【问题标题】:Moving compile items in msbuild into a separate file?将 msbuild 中的编译项移动到单独的文件中?
【发布时间】:2011-09-21 14:13:54
【问题描述】:

这可能是一个常见问题解答,但即使经过大量搜索,我们也无法找到解决方案。

我们有许多 msbuild 文件,它们都在同一组源文件上运行。 (这不是特别相关,但它们编译到完全不同的平台。)为了简化管理这些,我们想将 <Compile> 源文件名移动到一个单独的文件中,并从所有 msbuild 文件中引用它。

我们尝试剪切包含<Compile> 项目的<ItemGroup> 并将其粘贴到一个新文件中,并用

包围它

<Project DefaultTargets="Build" ToolsVersion="3.5"xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

然后使用

从原始文件中引用该文件

<Import Project="Common.files.csproj" />

但这不起作用 - 解决方案打开(由于我们破解了默认配置,因此出现警告),但解决方案资源管理器中没有出现任何项目。

我们做错了什么?

【问题讨论】:

  • 如果选择“显示所有文件”会发生什么?
  • @mellamokb:没关系 - 显示所有文件仅切换显示磁盘上的内容。为了确定,我也试过了。

标签: visual-studio msbuild


【解决方案1】:

已尝试使用 Visual Studio 2010:

1) 创建您的外部 .proj(或 .target)文件并添加您的文件(我使用了不同的项目名称,但这没关系)

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <ItemGroup>
        <ExternalCompile Include="Program.cs" />
        <ExternalCompile Include="Properties\AssemblyInfo.cs" />
    </ItemGroup>
</Project>

2) 导入外部 .proj 文件在 Visual Studio 项目文件的顶部

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
   <Import Project="MyExternalSources.proj" />
   <PropertyGroup>
   ...

并像这样修改Compile ItemGroup:

...
<ItemGroup>
    <Compile Include="@(ExternalCompile)" />
</ItemGroup>
...

警告:您必须将新项目/文件添加到外部 .proj 文件中 - 从 Visual Studio 中添加的所有项目/文件最终将如下所示:

...
<ItemGroup>
    <Compile Include="@(ExternalCompile)" />
    <Compile Include="MyNewClass.cs" />
</ItemGroup>
...

【讨论】:

  • 很好,很有效。是的,很遗憾不得不手动添加项目,但可以照常添加,然后在签入之前移动到外部文件。
  • 我用 尝试了同样的技术,但它似乎不起作用。有谁知道导入“默认”内容集的方法,例如使用现有的 OSS 编译的 Web 应用程序时。
  • @uniquelau 当文件位于“主”项目文件夹之外时,我刚刚尝试并遇到了一个问题。一旦我将“静态”内容移动到项目文件夹,它与Content ItemGroup 的工作方式相同。我的解决方案实际上只是一种解决方法,它展示了如何调整 VS 项目文件。在您的情况下,也许一个自定义的后期构建任务可以处理移动静态内容。
【解决方案2】:

我从未见过“包含”文件可用于 MSBuild。显然 Targets 文件以这种方式工作,但我还没有看到一个部分 msbuild 文件包含在另一个文件中。你能用这种方法吗?
http://msdn.microsoft.com/en-us/library/ms171454(VS.80).aspx

使用通配符是我过去解决这个问题的方法。

【讨论】:

  • 谢谢,但我仍在等待解决方案。如果所有其他方法都失败了,这可能是最后的手段,但这不是最佳选择。
  • 您还可以使用 CreateItem 任务与您自己的自定义文件解析相结合,在 BeforeBuild 目标期间将项目添加到 Compile ItemGroup...msdn.microsoft.com/en-us/library/s2y3e43x.aspx
猜你喜欢
  • 1970-01-01
  • 2012-02-17
  • 2013-02-22
  • 1970-01-01
  • 2013-08-14
  • 2015-06-24
  • 1970-01-01
  • 2010-10-27
  • 2020-11-25
相关资源
最近更新 更多