【问题标题】:VS 2010 Solution depending on another SolutionVS 2010 解决方案取决于另一个解决方案
【发布时间】: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


【解决方案1】:

我支持第一个解决方案:

在您的 M 解决方案中,使用 PostBuild 事件 在某个位置复制最新的构建二进制文件。 S 项目通过像项目中的 DLL 一样引用它们来使用这些二进制文件。

这样一次你重建M,所有S项目都会引用最新版本的M。

【讨论】:

    【解决方案2】:

    您应该考虑设计。一开始你会节省编译过程的时间,但后来你会花更多的时间来修复你的 Master 以适应所有的 Slave。

    通常您希望每次更改时都生成 Master (M)。想象一下,您更改 M,使其具有 S1 的新功能,并且一切正常。一段时间后,您尝试编译 S2,并根据您为 S1 对 M 所做的更改获取异常。

    为避免该问题,您通常使用版本号,以确保 p.e. S1 与 M 的 1.0 版一起使用,S2 与 M 的 1.1 版一起使用。当然,您希望您的主项目始终与所有版本兼容,但这可能很难维护,如果更改制动最多一个从站,您会很高兴计划一个时间。

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

    更新:
    另外我发现这篇文章很好地解释了解决方案管理:
    http://msdn.microsoft.com/en-us/library/ee817674.aspx

    【讨论】:

    • 是的,这当然是我们想要在整合所有内容后使用的正确方法,但我们正处于项目(M 和 S)的启动阶段,因此有很多变化和新功能在 M 中发生是因为 S 的需要。我们已经有了完整的版本号政策,但在这个阶段,我们实际上需要从 M 到 S 的快速往返,反之亦然。
    猜你喜欢
    • 2012-10-22
    • 1970-01-01
    • 2021-05-20
    • 1970-01-01
    • 1970-01-01
    • 2011-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多