在Visual Studio 2008中基于解决方案更改项目的文件

时间:2009-12-08 17:06:37

标签: visual-studio-2008 projects-and-solutions assembly-attributes

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

如何让项目使用不同的CommonAssemblyInfo.cs文件,具体取决于它们所处的解决方案?

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

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

3 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:0)

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

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

  1. 您需要创建一个继承模型,其中引用的项目包含父类,泛型类,然后每个项目实现泛型并将其包装在您将使用的新类中。
  2. 您只需在每个项目中编写该类,以使其足够具体。
  3. 在不了解您的解决方案空间的情况下,这些将是我的建议。

答案 2 :(得分:0)

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