从多个项目中引用C#代码

10

我有一个.cs文件,里面装满了我在多个项目中重复使用的C#代码。

现在,我通过将代码复制并粘贴到每个项目目录下的新文件中来将其包含在这些项目中。这是错误的做法。

正确的做法应该是:

  • 只在我的电脑上一个地方保留公共代码
  • 并保持链接的更新——因此当共享代码更改时,每个项目都知道它,并在我重新编译该项目时生效。

随意猜测,我期望会有一些类似于using mycode = C:\common\mycode.cs的指令,但我确定这不是.NET的做事方式。

(我正在使用C#2010、.NET 4.0,并且只在一台计算机上本地编译此代码。)

4个回答

9
将代码放入单独的类库项目中,并在其他项目中引用该项目。

9

或者,

  • 在 Solution Explorer 中右键点击项目
  • 选择 添加现有项
  • 浏览到另一个项目中的 .cs 文件,并单击选择该文件
  • 单击 添加 右侧的向下箭头按钮,然后选择 添加为链接

现在您有一个源文件被两个项目引用,但它具有您在第一个项目中给出的命名空间,这可能不是理想的。

最好的组织方式是根据其他两个答案的建议,在一个类库中放置公共代码,以使其具有 MyClassLibrary 而不是 SomeOtherProject 的命名空间。这样可节省较大的 dll 复制,这在开发类似 Windows Phone 这样小型设备时并不重要。或者将公共代码的命名空间更改为所有应用程序中的 Me.Common - 哪个是原始代码并不重要,您可以从任何引用它的项目中编辑它。

检查源代码控制是否存在问题。


完全不知道“添加为链接”这个功能,谢谢!对于那些我不太关心将10行代码正确组织到单独的类库项目中的小型测试项目非常有用。 - Dan Bechard
这是一个非常好的快速解决方案,可以先开始使用。后来,也许会采用类库或者像NPM/Nodejs模块中那样带有版本的库(如果在微服务架构中使用),那将会更好。 - Manohar Reddy Poreddy

7
创建一个类库,添加文件,构建项目,并引用从构建中创建的DLL。在将要引用它的每个文件中添加using语句。如果出现错误并且DLL在项目中,则可以右键单击对象->解决,它会为您添加using语句。

我已经做了所有的事情,但现在似乎无法使用类库中的函数。我需要某种using指令吗? - Joe
@Joe 是的,您需要将引用添加到项目中,然后在引用库中的每个文件中添加使用。因此,在顶部使用[命名空间]。此外,如果DLL在项目中,Visual Studio可以通过右键单击来解决它。 - Brad Semrad
我还需要将.dll中的类设为公共的... 扇自己一巴掌 - Joe
1
我有一个问题 - 我想把我的程序部署为单个 .exe 文件 - 那么我需要将那个 .dll 附加到 .exe 上吗?我知道我需要对第三方库这样做,但我不喜欢这样做。这也是我有点喜欢下面的“添加为链接”选项的原因 - 在这种情况下,代码将自动构建到我的应用程序中。 - Bartosz

0

我写了一个应用程序,可以自动将代码作为链接添加到项目中,非常适用于需要重复使用大量代码并稍作修改的项目。你可以在这里找到它:https://github.com/CADbloke/CodeLinker

或者

不要害怕编辑 XML .csproj 文件。例如,以下方法是有效的...

<Compile Include="$(Codez)\z.Libraries\diff-match-patch\DiffMatchPatch\**\*.cs"
Exclude="NotThisOne.cs;**\NotThisFolderWith\This*.cs">
<Link>Libs\%(RecursiveDir)%(Filename)%(Extension)</Link>
</Compile>

...并将在目标项目中作为链接文件,提供源文件夹及其子文件夹中的所有C#文件。

  • $(Codez)是我在PC上使用的Windows环境变量。
  • 我也可以在末尾使用*.*而不是*.cs
  • 这是Visual Studio可能会出现问题的情况之一,将文件添加到充满通配符链接文件的文件夹中可能会将它们分开成单独的条目。或者不会。这取决于风向。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接