1

在一个 C# 解决方案中,我有几个项目共享一个 CommonAssemblyInfo.cs 文件,因此某些程序集属性在所有项目之间共享。只要我只有一个 CommonAssemblyInfo.cs 文件,它就可以正常工作。但是我有几个使用这些项目的解决方案(应用程序),每个解决方案都有自己的 CommonAssemblyInfo.cs 版本。

如何根据项目所在的解决方案使项目使用不同的 CommonAssemblyInfo.cs 文件?

最后,我希望我的程序集具有特定于编译它们的解决方案的属性。

我认为我不能将它们制作成文件解决方案文件,因为它们不能都位于具有相同文件名的同一目录中。我不能使用预构建事件,因为我没有始终先构建的特定项目。我不想使用构建脚本,因为我希望能够通过 Visual Studio 环境构建和运行解决方案。

4

3 回答 3

2

不,我不相信你不能这样做——对我来说,这首先听起来是一个非常糟糕的主意。如果两个二进制文件是从完全相同的源构建的,具有完全相同的配置,为什么它们具有不同的属性是有意义的呢?

你想用这个来达到什么目的?IMO 你应该有一个非常好的理由,然后才能使构建变得更加复杂并违背正常的做事方式。

我还建议你只在CommonAssemblyInfo.cs文件中指定真正常见的东西——比如公司名称。AssemblyInfo.cs然后,每个项目都可以像往常一样拥有自己的项目特定设置。我个人不太喜欢在项目之间共享任何源文件,但我可以看到在这种情况下它是如何产生一定意义的。

于 2009-12-08T17:13:39.157 回答
0

如果您在这里构建一个简单的库,所有其他程序集都要引用,那么我会说将一个类库项目添加到您的解决方案中,其中包含 CommonAssemblyInfo.cs 文件,并添加来自其他项目的引用。

由于您需要每个项目都有不同的版本,因此您有两个选择:

  1. 您需要创建一个继承模型,其中引用的项目包含父类、泛型类,然后每个项目实现泛型并将其包装在您将使用的新类中。
  2. 您只需要简单地在每个项目中编写类以使其足够具体。

在不了解您的解决方案空间的情况下,这些将是我的建议。

于 2009-12-08T17:27:45.467 回答
0

您可以使用条件编译 (#if) 来破解它。我在紧急工作中做过这个,但这很糟糕。正如 Jon Skeet 解释的那样,更好地重构你的项目。

于 2010-06-11T13:59:17.607 回答