Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何部署不断变化的DLL?_C#_.net_Vb.net_Deployment_Dll - Fatal编程技术网

C# 如何部署不断变化的DLL?

C# 如何部署不断变化的DLL?,c#,.net,vb.net,deployment,dll,C#,.net,Vb.net,Deployment,Dll,我已经创建了几个使用我自己的DLL的小应用程序。问题是,这个DLL是不断变化的。我目前对此问题的解决方案是,我在类库解决方案中有一个创建和注册DLL的安装项目。在我的所有应用程序中,我必须打开解决方案并重新引用新创建/注册的DLL然后我必须重新编译他们的安装项目,卸载旧应用程序,然后重新安装新应用程序 必须有更好的方法,我只是不确定,因为我对这一切都是新手。我已经研究过ClickOnce,但我认为这不会解决我的问题,因为我无法发布类库。我已经检查了版本号,但我一定是做错了什么,因为它也不起作用

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

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

我理解,一旦DLL被创建并在应用程序中使用,它基本上不应该被触碰。在这种情况下,我没有这个选择。它是不断更新的。完成了

那么,有没有更好的办法?如能就指南或相关问题/答案/论坛提出建议,将不胜感激


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

确保对DLL的引用指定SpecificVersion=false。然后只需将每个新版本部署到GAC中,就可以了。
最后,您还可以使用手动强制版本。

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

签出


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

一种解决方案如下:

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

以上取决于您的界面是否稳定。如果不是,您可以编写一个(更)稳定的。

您有一个在运行时不断变化的dll?dll中有哪些变化?如果只是内部实现(不更改公共接口),您可以只替换DLL而不重新编译您的DLL签名的所有内容,如果是这样,您是否也在不断更改其版本号?如果是这样,请留下版本号。以上所有步骤都可以通过cmd脚本完成,所以也许可以自动化您当前的过程。什么是DLL?这是一个很好的解决方案。这正是OP想要的。其他解决方案,如NuGet,需要重新编译和重新部署其他项目。