我在一个解决方案(除了其他项目之外)中有两个库项目,这些项目必然需要共享某些类,但由于自动更新原因必须保持独立。
对于共享的类,我最好在两个库中使用相同的class.cs
文件,这样我就不必一直检查是否通过这两个库传播了对类的更改。
但是两个库的名称空间不同,因此每个库中包含类的文件需要不同的namespace classlib {}
声明。
我正在使用git repo,如果有技术可以通过分支/合并操作来完成此任务 目前正在使用VS2013。
我怎样才能做到这一点?
示例:
library1.dll
namespace library1
{
public class SharedClass
{
/// code must match SharedClass in libary2
}
}
library2.dll
namespace libary2
{
public class SharedClass
{
/// code must match SharedClass in library1
}
}
答案 0 :(得分:4)
在公共名称空间中声明SharedClass,而不是两个不同的名称空间。您可以将文件链接到项目中,而不是物理地包含它。
来自msdn:
您可以在Visual Studio中链接到项目中的文件。在解决方案资源管理器中,右键单击项目,然后选择“添加现有项目”或者,可以键入Shift + Alt + A.在“添加现有项”对话框中,选择要添加的文件,然后在“添加”下拉列表中,单击“添加为链接”。
namespace Khargoosh.MathLib.Common { public class SharedClass { ... } }
namespace Khargoosh.MathLib.Library1 { ... }
namespace Khargoosh.MathLib.Library2 { ... }
或
namespace Khargoosh.MathLib { public class SharedClass { ... } }
namespace Khargoosh.MathLib.Library1 { ... }
namespace Khargoosh.MathLib.Library2 { ... }
一种完全不同的处理方式是使用T4 template和一些逻辑来动态创建文件。 * .tt模板文件的内容(不是* .cs文件!):
namespace library1
{
<#@ include file="MyCommonClass.cs"#>
}
在另一个图书馆
namespace library2
{
<#@ include file="MyCommonClass.cs"#>
}
类文件本身不会声明命名空间。
答案 1 :(得分:3)
根据您提供的信息,如果您的共享课程确实是“常见的”和#34;你应该创建一个你的两个主要库可以引用的第三个库。例如:
MainLib1 (引用commonLib )
MainLib2 (引用commonLib )
<强> commonLib 强> (包括class.cs和其他常用代码)
答案 2 :(得分:3)