【问题标题】:How to build a solution that refers to another project without building both solutions i C#如何构建一个引用另一个项目的解决方案而不构建两个解决方案我 C#
【发布时间】:2013-01-19 08:41:47
【问题描述】:

我正在使用两种解决方案,solution_1(包括project_1 和 project_2)和solution_2(包括project_3),我不断收到用户的功能请求,以在 solution_2 的 project_3 中添加功能。我必须解决方案的原因是另一个程序员需要能够将功能添加到 project_3 并发布它,但我不希望他访问 project_1。 当我想发布新功能时,我必须在两个解决方案中构建和发布项目,但我只在 project_3 中进行了更改,所以这个项目应该是唯一发布的项目。

目前,project_1 引用了程序集 project_3,其中属性 Copy to local 为 FALSE,但这会导致以下错误:

Assembly 'project_3.dll' must be strong signed in order to be marked as a prerequisite. 

每当我构建 project_3 时,输出路径都会设置为对两个解决方案都可见的文件夹。

我的意思是,我不想在 solution_1 中继续构建和发布 project_1,我没有进行任何更改,而只是构建和发布 solution_2 中的strong>project_3,其中实际上有更改,以便用户可以使用新功能。

【问题讨论】:

  • 我觉得你所说的解决方案不是解决方案,而是项目......
  • 你不能将 2 个解决方案合并为 1 个解决方案吗?
  • 如果你想拥有不同的版本,你不需要两个解决方案。把你的工作做分支。
  • @daryal 你是对的!我会编辑这个问题。我想我早上问问题太早了:)

标签: c# .net assemblies


【解决方案1】:

一个项目可以在多个解决方案中。您可以简单地将project_3添加到solution_1中,这样当项目发生变化时,您只需重新编译一个解决方案即可。

请注意,如果您这样做,您应该注意一些问题;大部分是常识性的东西,但仍然:

  • 其他解决方案中的重构工具不了解此解决方案。换句话说,它们可能会破坏依赖关系(例如,如果对解决方案_2 进行重构,解决方案_1 对项目_3 的依赖关系(两者都存在)是有问题的)。
  • 最好不要同时打开两个解决方案,以免覆盖您自己的更改。
  • 虽然 VS.NET 支持这一点,但它并没有特别努力使它变得简单。因此,如果您的项目文件包含对解决方案范围变量的引用,您需要手动确保这没问题(例如,如果您有任何自定义构建步骤)
  • 特别是,默认情况下,nuget 将其包存储在解决方案级别的 /packages 文件夹中。如果一个项目在不同的解决方案中,这个包文件夹可能在不同的位置(不同的相对路径),这将存储在项目文件中并导致问题。我会避免 nuget 文件夹的不同(相对)路径。

您不应该引用项目_3 创建的程序集,您应该在解决方案1 ​​中包含现有项目3,并引用项目本身。 (这与强签名无关 - 这是一个不同的错误)。

【讨论】:

  • 我明白你的意思,这是有道理的,但由于某种原因,我无法解释自己。我想要的是 solution_1 中的 project_1 引用 solution_2 中的 project_3,所以每当我构建和发布设置时project_3 的项目,project_1 看到程序集 project_3 中的更改,而我没有对 solution_1 中的任何项目做任何事情。这对你来说更有意义吗?我很抱歉我的解释方式。我觉得很难……
  • 我不确定这是否是误解的根源,但要明确一点:没有 project_3 "from" solution_2 这样的东西 - 有一个项目,它恰好列在解决方案中.您可以在另一个解决方案中列出它就好了。项目在某种程度上不属于解决方案。至于设置项目 - 这是正交的。如果解决方案 2 还列出了项目 3,那么它将看到所做的任何更改而无需进一步操作。但是您仍然需要构建解决方案 2,以使这些更改真正影响构建输出。
  • 我是新手,所以可能会有误解。我只需要多考虑一下。我一直在阅读一些不同的文章/论坛,我认为我需要采取另一种方法来找到解决这个问题的方法。无论如何谢谢:)
  • 但是您知道您可以在 both 解决方案中使用 project_3 吗?这是重要的一点。
  • 是的,我这样做了,我试着看看我是否能解决这个问题,但没有任何运气。相反,我使用Assembly ClassLoadFrom() 方法编写了自己的代码,现在它已修复:)
猜你喜欢
  • 2018-05-24
  • 2019-05-18
  • 2011-06-07
  • 1970-01-01
  • 2012-01-14
  • 2011-12-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多