2011-09-21 32 views
7

这可能是一个常见问题解答,但即使经过大量搜索,我们仍无法找到解决方案。将msbuild中的编译项目移动到单独的文件中?

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

我们试图切割<ItemGroup>包含<Compile>项目并将其粘贴到一个新的文件,并围绕它

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

然后引用从原来的那个文件,

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

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

我们做错了什么?

+0

如果选择“显示所有文件”,会发生什么情况? – mellamokb

+1

@mellamokb:那应该不重要 - 显示所有文件只切换显示磁盘上的内容。我也尝试过,以确保。 – bright

回答

10

试图与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)在Visual Studio项目文件的顶端导入您的外部.proj文件

<?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> 
... 
+0

优秀, 这样可行。是的,很遗憾必须手动添加项目,但可以像平常一样添加项目,然后在签入之前移动到外部文件。 – bright

+0

我尝试了与相同的技巧,但它似乎不起作用。有没有人知道如何导入“默认”内容集,例如当与现有的OSS编译的Web应用程序一起工作时。 – uniquelau

+0

@uniquelau当文件位于“主”项目文件夹之外时,我只是试过并且遇到了一个问题。只要我将“静态”内容移动到项目文件夹中,它就与“Content”ItemGroup一样工作。我的解决方案实际上只是一种解决方法,并显示如何调整VS项目文件。也许一个自定义的构建后任务可以处理你的案例中移动的静态内容。 – Filburt

0

我从来没有见过“包含”文件与MSBuild一起使用。很明显,目标文件以这种方式工作,但我没有看到另一个部分的msbuild文件。你是否可以使用这样的方法?
http://msdn.microsoft.com/en-us/library/ms171454(VS.80).aspx

使用通配符是我过去如何解决这个问题。

+0

谢谢,但我仍然支持解决方案。如果一切都失败了,这可能是最后的手段,但它不是最佳的。 – bright

+0

您还可以使用CreateItem任务加上您自己的自定义文件分析功能在BeforeBuild目标期间将项目添加到编译ItemGroup中... http://msdn.microsoft.com/en-us/library/s2y3e43x.aspx –

相关问题