如何在不制作dll的情况下在两个项目之间进行代码共享?
问题是:我有一个同步用户和工具的工具。从LDAP到数据库的组。
现在这个工具是一个Windows服务,但是测试它是非常困难和耗时的。
这就是我制作一个控制台应用程序的原因,我可以测试LDAP同步,然后将相应的源代码文件复制到服务项目中。
但是......保持公共文件同步是一个问题。 我不想制作一个dll,因为这可能会让我产生问题 第三个项目,一个Windows安装程序(用于服务),我必须使用ExecutingAssembly路径...
有没有办法在不制作单独的dll的情况下共享代码? 自动静态链接,那么说呢?
答案 0 :(得分:34)
<强> How about adding a file as a link. 强>
在Visual Studio中右键单击控制台测试应用程序项目 - &gt;选择添加现有文件 - &gt;在文件添加对话框中导航到实际Windows服务项目中的文件 - &gt;选择您要分享的文件 - &gt;并在添加按钮上选择添加为链接选项。
答案 1 :(得分:12)
您可以将文件作为链接添加到项目中。在“添加现有项目”对话框中,“添加”按钮右侧有一个下拉列表。使用此选项“添加为链接”:
将文件作为解决方案项目添加为每个项目的链接。
答案 2 :(得分:2)
如何手动修改项目文件以指向同一源文件?
另一种选择 - 将两个项目放在同一个文件夹中。将类添加到一个,然后在另一个项目中添加现有类并指向刚刚创建的类。
答案 3 :(得分:2)
你可以:
所有这一切,最好的方法是咬住子弹并将共享代码存储在共享程序集(DLL)中。例如,当您决定通过WCF服务公开此代码时会发生什么?它开始变得更加复杂,因为你有3个位置引用相同的代码文件。不要只考虑是什么让你现在的生活变得最简单,想想将来你的生活(以及其他任何需要维护代码的人)的生活也会变得更加容易! =)
答案 4 :(得分:1)
Necromancing - 根据 Visual Studio 2017 :
您可以创建共享项目,然后在另一个项目中引用共享项目。
它将使用您引用共享项目的项目中的框架版本和库。如果没有冲突,您还可以在多个项目中使用相同的共享项目。
这基本上是源代码级别的静态链接。
这也适用于HTML和JavaScript文件(具体来说,它适用于发布),但是使用HTML&amp; JS文件,调试时会遇到问题......
它位于“经典Windows桌面”下,但您也可以将它用于.NET Core等。
答案 5 :(得分:0)
如果要共享功能,则应使用DLL或类似功能。
由于您要共享的是源,您实际上共享的是文件共享。因此,您可以通过让项目引用外部源代码来实现,或者让源代码管理器为您执行此操作。
如果您使用的是Visual SourceSafe,则可以在两个文件夹之间建立链接。 VSS将确保将它们视为同一文件。
答案 6 :(得分:0)
我将描述我们用于管理和测试Windows服务项目的设置。虽然这并没有回答“没有DLL共享代码”的问题&#34; (Unmesh的答案可以解决这个问题),我认为OP可能并没有意识到这对于 一个DLL是多么容易。无论如何,我希望它能帮助某人。
创建解决方案LDAPSync。在此解决方案中创建三个项目:
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员工。