繁体   English   中英

如何部署不断变化的DLL?

[英]How to deploy a DLL that is constantly changing?

我创建了几个使用我自己的DLL的小应用程序。 问题是,这个DLL不断变化。 我目前解决这个问题的方法是,我在类库解决方案中有一个Setup项目,用于创建和注册DLL。 在我的所有应用程序中,我必须打开解决方案并重新引用新创建/注册的DLL。 然后我必须重新编译他们的安装项目,卸载旧的应用程序,然后重新安装新的应用程序。

必须有一个更好的方法,我只是不确定,因为我对这一切都很新。 我已经查看了ClickOnce,但我认为这不会解决我的问题,因为我无法发布类库。 我已经研究过检查版本号但我必须做错了,因为它也不起作用。

我知道,一旦创建了一个DLL并在应用程序中使用它,就不应该触及它。 在这种情况下我没有这个选择。 它不断更新。 完成。

那么,有更好的方法吗? 我们将非常感谢指南或相关问题/答案/论坛的方向。

编辑 :DLL在运行时不会不断变化,但它不断发展以允许其他应用程序中的更多功能和细节。 另外,我想我应该提到的一件大事是Public接口不断变通 - 通常会添加新方法。

确保对DLL的引用指定SpecificVersion = false。 然后将每个新版本部署到GAC中,这应该可以解决问题。 最后,您还可以使用“ 绑定重定向”手动强制实施版本。

您可以尝试的解决方案是为项目使用单个解决方案,并在需要的任何地方引用项目。

看看NuGet

您可以设置一个内部Nuget存储库(实际上只是一个存储nupkg文件的文件夹。)然后,当您构建新的DLL时,您可以根据需要在工作室中更新应用程序。 这将确保它具有最新版本。 除非您正在修复的DLL中存在错误,否则它们不应该需要重新部署。

一种解决方案如下:

  • 物理上将接口与实现分开。 例如AssemblyA是接口,应用程序(AssemblyB说)在编译时只知道接口。 实现(AssemblyC)当然也知道/引用AssemblyA。 关键是AssemblyB没有引用AssemblyC。 这将要求您使用IoC容器(如MS Unity 2.0,但还有许多其他容器),以便在运行时解析和实例化您的混凝土。
  • 编写一个更新过程,找到新的AssemblyC.dll,替换本地副本,并使用反射和IoCContainer按照您需要的时间间隔“加载”新实现,通常是app启动。

以上依赖于您的界面稳定。 如果不是,您可以编写一个(更多)稳定的Facade

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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