将msbuild中的编译项移动到单独的文件中?

bri*_*ght 7 msbuild visual-studio

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

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

我们尝试切割<ItemGroup>包含这些<Compile>项目并将其粘贴到一个新文件中,然后将其包围

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

然后从原始引用该文件

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

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

我们做错了什么?

Fil*_*urt 11

尝试使用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>
Run Code Online (Sandbox Code Playgroud)

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>
   ...
Run Code Online (Sandbox Code Playgroud)

Compile像这样修改ItemGroup:

...
<ItemGroup>
    <Compile Include="@(ExternalCompile)" />
</ItemGroup>
...
Run Code Online (Sandbox Code Playgroud)

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

...
<ItemGroup>
    <Compile Include="@(ExternalCompile)" />
    <Compile Include="MyNewClass.cs" />
</ItemGroup>
...
Run Code Online (Sandbox Code Playgroud)