【问题标题】:Changing a project's files based on solution in Visual Studio 2008根据 Visual Studio 2008 中的解决方案更改项目文件
【发布时间】:2010-12-24 12:19:57
【问题描述】:

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

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

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

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

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

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

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

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-04-23
          • 1970-01-01
          • 2019-03-02
          • 2021-01-29
          • 1970-01-01
          • 2010-09-18
          • 2023-04-06
          • 2012-05-29
          相关资源
          最近更新 更多