在没有dll的情况下在2个项目之间共享代码

时间:2010-12-02 15:18:56

标签: c# .net vb.net windows-services

如何在不制作dll的情况下在两个项目之间进行代码共享?

问题是:我有一个同步用户和工具的工具。从LDAP到数据库的组。

现在这个工具是一个Windows服务,但是测试它是非常困难和耗时的。

这就是我制作一个控制台应用程序的原因,我可以测试LDAP同步,然后将相应的源代码文件复制到服务项目中。

但是......保持公共文件同步是一个问题。 我不想制作一个dll,因为这可能会让我产生问题 第三个项目,一个Windows安装程序(用于服务),我必须使用ExecutingAssembly路径...

有没有办法在不制作单独的dll的情况下共享代码? 自动静态链接,那么说呢?

7 个答案:

答案 0 :(得分:34)

<强> How about adding a file as a link.

在Visual Studio中右键单击控制台测试应用程序项目 - &gt;选择添加现有文件 - &gt;在文件添加对话框中导航到实际Windows服务项目中的文件 - &gt;选择您要分享的文件 - &gt;并在添加按钮上选择添加为链接选项。

答案 1 :(得分:12)

您可以将文件作为链接添加到项目中。在“添加现有项目”对话框中,“添加”按钮右侧有一个下拉列表。使用此选项“添加为链接”:

alt text

将文件作为解决方案项目添加为每个项目的链接。

答案 2 :(得分:2)

如何手动修改项目文件以指向同一源文件?

另一种选择 - 将两个项目放在同一个文件夹中。将类添加到一个,然后在另一个项目中添加现有类并指向刚刚创建的类。

答案 3 :(得分:2)

你可以:

  • 将共享代码维护在生成DLL 的单独项目中,然后使用ILMerge之类的工具来转换DLL&amp; EXE成一个组装。
  • 通过调整项目文件或使用源树布局做一些时髦的事情来共享多个项目之间的源文件。

所有这一切,最好的方法是咬住子弹并将共享代码存储在共享程序集(DLL)中。例如,当您决定通过WCF服务公开此代码时会发生什么?它开始变得更加复杂,因为你有3个位置引用相同的代码文件。不要只考虑是什么让你现在的生活变得最简单,想想将来你的生活(以及其他任何需要维护代码的人)的生活也会变得更加容易! =)

答案 4 :(得分:1)

Necromancing - 根据 Visual Studio 2017

您可以创建共享项目,然后在另一个项目中引用共享项目。

它将使用您引用共享项目的项目中的框架版本和库。如果没有冲突,您还可以在多个项目中使用相同的共享项目。

这基本上是源代码级别的静态链接。
这也适用于HTML和JavaScript文件(具体来说,它适用于发布),但是使用HTML&amp; JS文件,调试时会遇到问题......

它位于“经典Windows桌面”下,但您也可以将它用于.NET Core等。

enter image description here

答案 5 :(得分:0)

如果要共享功能,则应使用DLL或类似功能。

由于您要共享的是,您实际上共享的是文件共享。因此,您可以通过让项目引用外部源代码来实现,或者让源代码管理器为您执行此操作。

如果您使用的是Visual SourceSafe,则可以在两个文件夹之间建立链接。 VSS将确保将它们视为同一文件。

答案 6 :(得分:0)

我将描述我们用于管理和测试Windows服务项目的设置。虽然这并没有回答“没有DLL共享代码”的问题&#34; (Unmesh的答案可以解决这个问题),我认为OP可能并没有意识到这对于 一个DLL是多么容易。无论如何,我希望它能帮助某人

创建解决方案LDAPSync。在此解决方案中创建三个项目:

  • LDAPSyncLib
  • LDAPSyncSvc
  • LDAPSyncTest

LDAPSyncLib 是一个包含所有业务逻辑和主要功能的DLL项目。

LDAPSyncSvc 是一个Windows服务项目,它包含两个类,一个继承自ServiceBase的服务控制器类,以及一个用于服务的Installer类。该项目有一个&#34;项目参考&#34;到LDAPSyncLib。

LDAPSyncTest 是GUI应用程序(WinForms,WCF等)或控制台应用程序,具体取决于您的需要。该项目还有一个&#34;项目参考&#34;到LDAPSyncLib。其唯一目的是提供一些界面,使您可以轻松地将所需的调用进入业务逻辑以进行测试。在Visual Studio中,将其设置为&#34; StartUp Project&#34;。

现在,当您通过Visual Studio运行调试时,您将获得一个很好的小GUI或命令窗口,您可以使用它来手动进行测试调用。当您将其作为Windows服务安装时,LDAPSyncSvc项目的控制器类将接管并处理所有必要的服务请求(启动,停止,暂停等)。

我们有大约30个内部Windows服务项目,我们已经持续管理,开发和测试了十多年,这个工作流程在快速发现和修复错误时证明是非常宝贵的。祝你的项目好运,我希望这有助于未来的Google员工。