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

如何在不创建DLL的情况下在两个项目之间进行代码共享?

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

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

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

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

有没有办法分享代码而不需要单独的dll? Automagic静态链接,这么说呢?

如何将文件添加为链接。

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

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

替代文字

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

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

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

你可以:

  • 将共享代码保存在生成DLL的单独项目中,然后使用ILMerge等工具将DLL和EXE转换为一个程序集。
  • 通过调整项目文件或使用源树布局做一些时髦的事情来共享多个项目之间的源文件。

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

Necromancing – 根据Visual Studio 2017

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

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

这基本上是源代码级别的静态链接。
这也适用于HTML和JavaScript文件(特别是,它适用于发布),但是对于HTML和JS文件,在调试时会遇到问题……

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

在此处输入图像描述

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

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

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

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


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

  • LDAPSyncLib
  • LDAPSyncSvc
  • LDAPSyncTest

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

LDAPSyncSvc是一个Windows服务项目,它包含两个类,一个inheritance自ServiceBase的服务控制器类,以及一个服务的Installer类。 该项目具有LDAPSyncLib的“项目引用”。

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

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

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