在另一个项目/命名空间中使用现有源代码

kha*_*osh 5 c# git repository visual-studio visual-studio-2013

我在一个解决方案中有两个库项目(除了其他项目),它们必然需要共享某些类,但由于自动更新的原因必须保持独立.

对于共享的类,我理想地希望class.cs在两个库中使用相同的文件,这样我就不必一致地检查对类的更改是通过两个库传播的.

但是,这两个库的名称空间不同,因此每个库中包含类的文件需要不同的namespace classlib {}声明.

我正在使用git repo,如果有技术通过分支/合并操作来完成此操作.
目前正在使用VS2013.

我怎样才能做到这一点?


例:

library1.dll

namespace library1
{
    public class SharedClass
    {
        /// code must match SharedClass in libary2
    }
}
Run Code Online (Sandbox Code Playgroud)

library2.dll

namespace libary2
{
    public class SharedClass
    {
        /// code must match SharedClass in library1
    }
}
Run Code Online (Sandbox Code Playgroud)

Oli*_*bes 5

在公共命名空间中声明 SharedClass,而不是在两个不同的命名空间中。您可以将文件链接到项目中,而不是在物理上包含它。

msdn

在 Visual Studio 中链接到项目中的文件。在解决方案资源管理器中,右键单击您的项目,然后选择添加现有项目或者,您可以键入 Shift+Alt+A。在“添加现有项目”对话框中,选择要添加的文件,然后在“添加”下拉列表中,单击“添加为链接”。

namespace Khargoosh.MathLib.Common   { public class SharedClass { ... }  }
namespace Khargoosh.MathLib.Library1 { ... }
namespace Khargoosh.MathLib.Library2 { ... }
Run Code Online (Sandbox Code Playgroud)

或者

namespace Khargoosh.MathLib          { public class SharedClass { ... }  }
namespace Khargoosh.MathLib.Library1 { ... }
namespace Khargoosh.MathLib.Library2 { ... }
Run Code Online (Sandbox Code Playgroud)

一种完全不同的处理方式是使用带有一些逻辑的T4 模板来动态创建文件。*.tt 模板文件的内容(不是 *.cs 文件!):

namespace library1
{
<#@ include file="MyCommonClass.cs"#>
}
Run Code Online (Sandbox Code Playgroud)

在另一个图书馆

namespace library2
{
<#@ include file="MyCommonClass.cs"#>
}
Run Code Online (Sandbox Code Playgroud)

类文件本身不会声明命名空间。