【发布时间】:2012-03-31 18:25:13
【问题描述】:
我有 2 个解决方案(比如说 Master Framework M 和 Slave Project S)。 M 被许多 S 类的解决方案使用。 在我的构建过程中,我从 M 构建所有 DLL,然后在 S 中使用它们。 在工作时,我想要一个更快的循环,我可以轻松地修改 M 并立即在 S 中使用。
您可能知道的问题都与您在 csproj 文件中引用库或项目的方式有关。
如果你想链接一个 DLL,你必须这样做
<Reference>
<HintPath>..\lib\$(Platform)\$(Configuration)\M.Example.dll</HintPath>
</Reference>
如果你想链接一个项目(甚至来自另一个解决方案),你必须这样做
<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) 留下 2 个不同的解决方案并在 M 中工作,然后在 S 中构建和工作,仅引用 DLL 并使用自定义输入项目(仅在开发中),该项目将 M 中生成的 DLL 复制到 S 的 lib 目录中,因此 S 可以使用它们而无需查看 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>
BUILDING 仅在官方构建过程中定义。
我想让这更容易,也许更聪明
【问题讨论】:
-
M方案有多少个项目?
-
解决方案依赖于解决方案究竟是什么意思?通常,解决方案 S 中的某些项目依赖于解决方案 M 中的某些项目。您是这个意思吗?如果是这样,您可以简单地将这些项目添加到 both 解决方案中。
标签: c# visual-studio-2010 build-process projects-and-solutions