0

我有2个解决方案(可以说Master Framework M和Slave Project S)。 M用于许多S类解决方案。 在我的构建过程中,我建立所有的M的DLL和S. 然后用它们工作时,我想更快的周期,我可以很容易地修改M和立即使用S.VS 2010解决方案取决于另一个解决方案

的问题,因为你可能知道都与您在csproj文件中引用库或项目的方式有关。

如果您想链接你如果想(甚至从其他解决方案)链接了一个项目,做这样的事情

<Reference> 
    <HintPath>..\lib\$(Platform)\$(Configuration)\M.Example.dll</HintPath> 
</Reference> 

你必须这样做,这样一个DLL

<ProjectReference Include="..\path to project in other solution\M.Example.csproj"> 
    <Project>{2009D1C4-E18F-6CF8-8AA4-B53A1B2F1009}</Project> 
    <Name>M.Example</Name> 
</ProjectReference> 

这是直接写在C#项目(csproj)文件!所以你不能在同一个文件中为不同目的使用项目或DLL

我不想维护2个csproj文件,一个引用构建过程的所有DLL,另一个引用用于开发& CI目的的项目。

我有两个主要思路是: 1)留在M 2个不同的解决方案和工作,然后建立和S中只参考DLL和使用自定义输入项目(仅在研究与开发工作)的DLL中生产出副本因此S的lib目录中的M可以使用它们,而不必在S根外部或引用其他项目。

2)使用条件这样

<Reference Condition='$(BUILDING)!=""'> 
    <HintPath>..\lib\$(Platform)\$(Configuration)\M.Example.dll</HintPath> 
</Reference> 

<ProjectReference Condition='$(BUILDING)==""' Include="..\path to project in other solution\M.Example.csproj"> 
    <Project>{2009D1C4-E18F-6CF8-8AA4-B53A1B2F1009}</Project> 
    <Name>M.Example</Name> 
</ProjectReference> 

凡建筑仅被定义在正式构建过程。

我想使这更容易,也许更聪明

+0

M解决方案中有多少个项目? – Reniuz 2012-03-15 08:57:22

+0

解决方案依赖于解决方案意味着什么?通常,解决方案S中的一些项目取决于解决方案M中的一些项目。这是您的意思吗?如果是这样,您可以简单地将这些项目添加到* both *解决方案中。 – jalf 2012-03-15 09:12:18

回答

1

你应该考虑设计。在第一时间,你将节省时间与编译过程,但后来你会花更多的时间来修复你的主人,以适应所有的奴隶。

通常你想在每次改变它时生成主(M)。想象一下你改变M,以便它有一个新的功能,并且一切正常。一段时间后,您尝试编译S2并根据您为S1所做的更改获取异常。

为了避免这个问题,你通常使用版本号,以确保p.e. S1适用于版本1.0的M,S2适用于版本1.1的M.当然,您希望您的主项目始终与所有版本兼容,但难以维护,并且如果更改最多只有一个从机,则您将很高兴投影一次。

通过postbuild事件,您可以应用一些将您的输出复制到其他项目的代码。我只用过一次,但在一个项目中。有了多种解决方案,您无法确定,该路径适用于其他机器。

UPDATE:
另外我发现这篇文章,解释解决方案管理得非常好:
http://msdn.microsoft.com/en-us/library/ee817674.aspx

+0

是的,这当然是我们在整合时想要使用的正确方法,但是我们处于项目的启动阶段(包括M和S),所以M中的很多变化和新功能都是因为S需求而发生的。我们已经有完整的版本号政策,但在这个阶段,我们实际上需要从M到S的快速往返,反之亦然。 – 2012-03-20 09:58:25

+0

发布后事件有什么意义?这应该工作。 – Tarion 2012-03-20 13:08:09

1

我会站在一个第一sollution:

在你的2M溶液使用PostBuild事件在某个位置复制最新的构建二进制文件。 S项目通过引用它们像项目中的DLL一样消耗这些二进制文件。

这样一次你重建M,所有S项目都会参考最新版本M.