我有两个C#DLL - 一个“api”dll,一个应用程序接口集合,以及一个“插件”DLL,这个代码使用API来扩展我们的应用程序。
每当我进行新的“api”构建时,插件dll都无法在我们的应用程序中加载:
无法加载模块中的类。
要解决这个问题,我们只需要重建插件(因为它使用的是“最新的”API dll。
我的猜测是它与Visual Studio或编译器如何对DLL进行版本控制有关。现在,API dll的版本为1.0.6469.2848
,这是自动化的。
我需要更多的灵活性,但我不知道如何去做。在寻找解决方案时,我选择了错误的术语。
最好,我想要更接近semver的东西 - 我的插件DLL应该继续加载/工作,如果它是针对api版本1.0.1编译的,即使我的应用程序有api版本1.0.2,或者1.1。只有2.x,“拒绝向后兼容性的API更改”应该被拒绝。
答案 0 :(得分:1)
正如我认为你已经发现的那样,正是装配版本搞砸了你。这是因为插件的版本构建/宏编号已增加,应用程序是根据以前的版本构建的。
你可以通过几种方式解决这个问题。
<dependentAssembly>
<assemblyIdentity name="someAssembly"
publicKeyToken="32ab4ba45e0a69a1" culture="en-us" />
<bindingRedirect oldVersion="1.0.0.0-7.0.0.0" newVersion="8.0.0.0" />
</dependentAssembly>
AssemblyVersionAttribute
(1.2.3)仅在突破变化时递增。 AssemblyFileVersionAttribute
我将使用构建增加,以便您可以确定dll的实际构建版本。您可以在AssemblyInfo.cs
我确实回答了关于可能有用的程序集版本的另一个question。
根据您构建程序集的方式(本地或构建服务器),生成版本号的方式会有所不同。如果你在当地建设,你需要,正如Sylence在他的回答中指出的那样,改变AssemblyVersionAtribute
中的外卡。如果您使用的是构建服务器,例如TeamCity,Jenkins等。那么你可以在编译之前完全覆盖程序集和文件版本。
答案 1 :(得分:0)
在API项目中查找$total = ($gm.samaccountname | Select -Unique).count
文件。你有一个AssemblyInfo.cs
和AssemblyVersion
可以设置为你想要的任何东西。只需确保您在版本中不使用*。
这样,每次构建后版本都会保持不变。