简体   繁体   中英

Use existing source code in another project/namespace

I have two library projects within a single solution (in addition to other projects) which necessarily need to share certain classes but must remain separate for automatic-update reasons.

For the classes that are shared, I would ideally like to use the same class.cs file in both libraries so that I don't have to consistently check that changes to the class are propagated through both libraries.

However the namespaces of the two libraries are different, and so the class-containing file in each library requires a different namespace classlib {} declaration.

I am using a git repo, if there is a technique to do this through branch/merge operations.
Presently using VS2013.

How can I achieve this?


Example:

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
    }
}

Declare the SharedClass in a common namespace, instead of two different namespaces. You could link the file into the projects instead of including it physically.

From msdn :

You link to a file from your project in Visual Studio. In Solution Explorer, right-click your project, and then select Add Existing item Or, you can type Shift+Alt+A. In the Add Existing Item dialog box, select the file you want to add, and in the Add drop-down list, click Add As Link.

namespace Khargoosh.MathLib.Common   { public class SharedClass { ... }  }
namespace Khargoosh.MathLib.Library1 { ... }
namespace Khargoosh.MathLib.Library2 { ... }

or

namespace Khargoosh.MathLib          { public class SharedClass { ... }  }
namespace Khargoosh.MathLib.Library1 { ... }
namespace Khargoosh.MathLib.Library2 { ... }

A completely other way of handling that would be to use the T4 template with some logic to create the file dynamically. Content of the *.tt template files (not *.cs files!):

namespace library1
{
<#@ include file="MyCommonClass.cs"#>
}

And in the other library

namespace library2
{
<#@ include file="MyCommonClass.cs"#>
}

The class file itself would not declare a namespace.

Based on the info you've provided, if your shared classes are truly "common" you should create a 3rd library that both of your main libs can reference. for example:

MainLib1 ( reference commonLib )

MainLib2 ( reference commonLib )

commonLib (includes class.cs and other common code)

I need to be able to update the library.dll files separately

Then you should use submodules for this task.

Submodule are different git repositories under the same root.
This way you can manage 2 different project at folder level inside the root repository

在此输入图像描述

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM