如何使用NuGet工作流避免由程序集版本不匹配导致的Winforms设计器错误

梅多42

在公司外面,我们使用NuGet对内部库进行版本控制。对库的每次提交都会触发构建服务器,该服务器将生成一个新的NuGet软件包并将其上传到我们的内部提要中。

这对我们来说效果很好,但是我们经常遇到WinForms设计器的问题,在WinForms设计器中,它拒绝加载带有以下错误消息的表单:

找不到文件或程序集“ UILib,版本= 1.0.0.906,区域性=中性,PublicKeyToken = null”或没有相关性。系统找不到指定的文件。

(大致:找不到文件或程序集“ UILib,版本= 1.0.0.906,文化=中性,PublicKeyToken =空”或其依赖项之一。系统找不到此文件。)

不过,这只是一个设计者的问题-该应用程序将毫无问题地构建并且将按预期运行。

这就是问题所在,但是现在您需要一些有价值的上下文来使它变得毫无道理。我要打开的表单是应用程序的一部分(简称为App),它包含一个UserControl,它是我们特定于产品的UI库(ProductUILib)的一部分。该库又引用了我们的通用UI库(UILib)。但是,应用程序本身也直接依赖于UILib。

UILib和ProductUILib均通过其自己的NuGet包提供。因此,简化的依赖图如下所示:

App ----> ProductUILib ----> UILib
 |                             ^
 ------------------------------|

只要ProductUILib和App引用相同版本的UILib(例如1.0.0.906),一切都很好。但是,如果我修改UILib,然后在App中更新我的NuGet依赖项,则App将获取并引用UILib的最新版本(例如1.0.0.932)。ProductUILib是针对较早的UILib构建的,但这应该没问题,因为对UILib的所有更改都是向后兼容的,而且这些库也没有强名称。实际上,构建和运行App可以正常工作。但是,设计者现在无法使用受影响的表单,并显示了我上面提到的错误消息。

为了解决该问题,我们还必须更新ProductUILib的NuGet包,以便它反过来根据最新的UILib构建,然后再次更新App的依赖项以获得新的ProductUILib。但是,这很快变得很乏味,尤其是在具有更多库和依赖项的情况下。

我在VS 2010和最新的VS 2013中都进行了测试,新版本显示了完全相同的行为。

您对我们如何避免此问题有任何建议?

梅多42

我们设法通过改变我们的战略使用来解决问题AssemblyVersionAssemblyFileVersionAssemblyInformationalVersion

通过将其设置为当前SVN修订版号,我们会在每次构建时自动生成版本号的最后一部分。此生成的版本号(例如1.0.0.906)用于同时加入AssemblyVersionAssemblyFileVersion

设计师显然会遇到不匹配的问题,AssemblyVersion因为具有不同AssemblyVersion程序集被认为是不兼容的。但是,没有强名的程序集的正常加载过程并不介意不匹配,因此可以构建和运行程序。所以设计师有点挑剔。

解决方案是使用一个固定值,AssemblyVersion因为我们只会在重大更改时进行更新。现在,生成的版本号同时指向AssemblyFileVersionAssemblyInformationalVersion最后一个很重要,因为NuGet始终会从其中填充.nuspec $ version $占位符,AssemblyVersion除非AssemblyInformationalVersion存在该占位符以覆盖它,并且我们想生成要用于NuGet软件包的版本号。

因此,总而言之:

  • 仅更新AssemblyVersion重大更改
  • 使用AssemblyInformationalVersion该号码应该进入你的NuGet包

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Dynamics CRM 2013:工作流设计器布尔和选项集字段设置的值消失了

来自分类Dev

如何在重新托管的工作流设计器中扩展上下文菜单?

来自分类Dev

WF4刷新工作流设计器

来自分类Dev

崩溃导致驱动程序版本不匹配的glsl扩展

来自分类Dev

崩溃导致驱动程序版本不匹配的glsl扩展

来自分类Dev

Powershell工作流DynamicActivity编译器错误'。' 预期使用$ Date变量

来自分类Dev

如何将右键单击断点菜单添加到重新托管的工作流设计器

来自分类Dev

如何将右键单击的断点菜单添加到重新托管的工作流设计器

来自分类Dev

Newtonsoft.Json的Twitterizer错误:“ WRN:比较程序集名称导致不匹配:主要版本”

来自分类Dev

业务运营/工作流设计模式

来自分类Dev

如何使用自定义工作流步骤查找所有工作流

来自分类Dev

如何查看会话或工作流的服务器连接

来自分类Dev

使用PCL和Xamarin执行Azure移动服务的单元测试时,程序集版本不匹配

来自分类Dev

不能使用 wine- 版本不匹配错误

来自分类Dev

当训练时使用的keras版本未知时,如何使用版本不匹配错误加载Keras模型

来自分类Dev

如何在工作流本身中使用Oozie工作流配置属性?

来自分类Dev

如何在开发/部署工作流中使用Docker?

来自分类Dev

如何使用按钮(JavaScript?)激活SharePoint 2013工作流?

来自分类Dev

如何使用 networkx 表示工作流链?

来自分类Dev

顺序工作流程设计器

来自分类Dev

两个解决方案中均发生Nuget版本不匹配错误

来自分类Dev

无法在工作流基础规则集编辑器中访问枚举

来自分类Dev

由于jackson-databind版本不匹配而导致的序列化错误?

来自分类Dev

由于minSDK和targetSDK版本不匹配,导致跳过Android Studio AndroidManifest合并错误

来自分类Dev

NuGet软件包版本与参考版本不匹配

来自分类Dev

Proton使用的mesa + vulkan驱动程序版本与主机mesa驱动程序版本不匹配

来自分类Dev

找不到运行时抛出方法 - 引用的程序集版本不匹配

来自分类Dev

对于Cookiecutter Django项目,建议使用哪种版本控制工作流?

来自分类Dev

使用的工作流程设计模式类型?

Related 相关文章

  1. 1

    Dynamics CRM 2013:工作流设计器布尔和选项集字段设置的值消失了

  2. 2

    如何在重新托管的工作流设计器中扩展上下文菜单?

  3. 3

    WF4刷新工作流设计器

  4. 4

    崩溃导致驱动程序版本不匹配的glsl扩展

  5. 5

    崩溃导致驱动程序版本不匹配的glsl扩展

  6. 6

    Powershell工作流DynamicActivity编译器错误'。' 预期使用$ Date变量

  7. 7

    如何将右键单击断点菜单添加到重新托管的工作流设计器

  8. 8

    如何将右键单击的断点菜单添加到重新托管的工作流设计器

  9. 9

    Newtonsoft.Json的Twitterizer错误:“ WRN:比较程序集名称导致不匹配:主要版本”

  10. 10

    业务运营/工作流设计模式

  11. 11

    如何使用自定义工作流步骤查找所有工作流

  12. 12

    如何查看会话或工作流的服务器连接

  13. 13

    使用PCL和Xamarin执行Azure移动服务的单元测试时,程序集版本不匹配

  14. 14

    不能使用 wine- 版本不匹配错误

  15. 15

    当训练时使用的keras版本未知时,如何使用版本不匹配错误加载Keras模型

  16. 16

    如何在工作流本身中使用Oozie工作流配置属性?

  17. 17

    如何在开发/部署工作流中使用Docker?

  18. 18

    如何使用按钮(JavaScript?)激活SharePoint 2013工作流?

  19. 19

    如何使用 networkx 表示工作流链?

  20. 20

    顺序工作流程设计器

  21. 21

    两个解决方案中均发生Nuget版本不匹配错误

  22. 22

    无法在工作流基础规则集编辑器中访问枚举

  23. 23

    由于jackson-databind版本不匹配而导致的序列化错误?

  24. 24

    由于minSDK和targetSDK版本不匹配,导致跳过Android Studio AndroidManifest合并错误

  25. 25

    NuGet软件包版本与参考版本不匹配

  26. 26

    Proton使用的mesa + vulkan驱动程序版本与主机mesa驱动程序版本不匹配

  27. 27

    找不到运行时抛出方法 - 引用的程序集版本不匹配

  28. 28

    对于Cookiecutter Django项目,建议使用哪种版本控制工作流?

  29. 29

    使用的工作流程设计模式类型?

热门标签

归档