C#根据CSProj设置获取Namespace

C# Obtaining Namespace Based on CSProj settings

有没有办法在不使用预处理器指令的情况下获取 .csproj 默认命名空间并让 Visual Studio 理解它?

例如:

CS 项目 1 的默认命名空间为 SomeCompany.ProductA

CS 项目 2 的默认命名空间为 SomeCompany.ProductB

CS 项目 1 有一个 cs 文件存在于 BaseClasses/MySpecialBase.cs

CS 项目 2 有一个链接文件 到另一个项目中的同一文件。这样可以维护一个文件版本,而无需使用不同的程序集。

CS 项目 2 现在有一个 cs 文件引用了 CS 项目 1 的内容,因此 class 命名空间现在不正确。

单个cs文件中是否有关键字可以使用当前csproject文件的Default Namespace

IE:[MyDefaultNameSpace].BaseClasses

我想尽可能避免执行#if #else,这样我就不必添加符号了。

namespace [somekeywordhere].BaseClasses
{
     class MySpecialBase
     {
        ....
     }
}

尝试使用 "Reflection API" - https://msdn.microsoft.com/en-us/library/ms173183.aspx 例如。

System.Type myNameSpaceAndClassName = this.getType()

不,无法在源代码中使用 "Default Namespace"。样板 T4 模板使用它来自动准备新文件,但它是一个 Visual Studio 参数而不是代码的实际 属性。

如您所说,这可以通过 #ifs 和符号的一些巧妙用法来完成,或者如 DaveC 所说,您可以准备一个 T4 模板来生成更正名称空间的副本(这不会使用链接).无论如何,这涉及一些工作。

当更深层次的构造(你的共享链接文件)使用更具体的东西(来自一个或另一个项目的代码)时,我看到了一种逻辑层次结构的倒置,因为我总是使用链接文件来处理诸如全局版本属性或其他程序集属性(例如公司、产品)之类的东西,因此此共享文件从不依赖于任何东西 "logically above" 它。但我想你有你的理由,只是说清楚。