我有几个Visual Studio解决方案/项目(一些VB,一些C#)都在设计时引用了一个常见的DLL。此DLL不必复制到输出文件夹,因为只在编写代码时才需要它。每隔几个月,此DLL将更新为更新版本,我的所有项目都需要引用更新版本。
处理此问题的最佳方法是什么?
答案 0 :(得分:2)
您必须使用在GAC(全局程序集缓存)中共享的共享程序集。
比如说,你已经编写了一个类,一个软件,无论你有什么,你想让它成为一个共享组件。
首先,通过在VS中创建新的类库项目并将所有代码传输到该项目,使其成为程序集。不要构建/运行它!请注意,我们只是传输代码,但程序集(.DLL文件)尚未实际生成,因为我们还没有构建项目。
在构建程序集之前,我们必须分两步创建/共享一个用于组装程序集的键:
a)通过在VS cmd中执行下面的cmd来创建密钥:
sn -k“C:[DirectoryToPlaceKey] [KeyName] .key”b)通过将以下属性添加到类库项目的properties文件夹中的AsseblyInfo.vb / cs文件来共享它:
在VB.Net中:
在C#中:
[Assembly:AssemblyKeyFile(“C:[包含密钥文件的目录] [KeyName] .key”)](只需将其复制并粘贴到AssemblyInfo.vb / cs文件中,但写下您的目录和文件名)
现在,您通过构建项目来进行组装。只需构建项目(至少按F5一次!)。通过这样做,我们需要的.dll文件(程序集)在项目的同一文件夹中的“bin”文件夹中创建。
现在我们通过将.dll文件复制到GAC中来共享它(全局程序集缓存:它是所有程序集聚集在一起的地方。目录是:“C:\ windows \ Microsoft.Net \ assembly \ GAC_MSIL”但是你不需要知道,因为下面的工具为你做了〜)通过在VS cmd中执行以下命令:
gacutil -I“C:[PathToBinDirectoryInVSProject] \ myGAC.dll”
你已经完成了!您现在可以引用和使用所有应用程序中的共享程序集,并且只要您想要更新,只需更新共享程序集。希望有所帮助!
答案 1 :(得分:0)
您可以创建nuget资源,并使用Nuget Server(最新版本的teamcity支持它) - 所有更新都将由nuget处理。
其他方法是在此文件夹中创建公共文件夹和所有项目点到dll(相对地),在这种情况下,您需要在一个文件夹中更新dll(在重建解决方案后dll将自动更新)
当然你总是可以在GAC(全局程序集缓存)中安装dll这是由名为gacutil.exe的工具处理的(在网上有很多例子如何处理它)。