Vb.net 强签名程序集

Vb.net 强签名程序集,vb.net,compiler-construction,publishing,Vb.net,Compiler Construction,Publishing,我有一个用VisualBasic2008Express制作的项目。我从其他人的C#项目中转换了它,但它可以工作。它有几个DLL依赖项。我去发布我的项目,这样我就可以在另一台机器上安装它,对于每个DLL,我都会得到一个错误:“程序集必须是强签名的,才能被标记为先决条件。”我做了一些研究,但没有发现很多,我发现的东西我并不真正理解。这个错误意味着什么?解决这个问题的最佳方法是什么?还有一件事:我花了很长时间才能正确引用我的所有dll,因此我更希望解决方案与移动dll无关,因为这可能会破坏我的主项目中

我有一个用VisualBasic2008Express制作的项目。我从其他人的C#项目中转换了它,但它可以工作。它有几个DLL依赖项。我去发布我的项目,这样我就可以在另一台机器上安装它,对于每个DLL,我都会得到一个错误:“程序集必须是强签名的,才能被标记为先决条件。”我做了一些研究,但没有发现很多,我发现的东西我并不真正理解。这个错误意味着什么?解决这个问题的最佳方法是什么?还有一件事:我花了很长时间才能正确引用我的所有dll,因此我更希望解决方案与移动dll无关,因为这可能会破坏我的主项目中的功能。

如果您通过ClickOnce发布,请转到发布页面并单击“应用程序文件”。从那里你应该看到你的DLL的列表。确保给您带来麻烦的发布状态标记为“包括”,而不是“先决条件”


此错误消息的意思是,当前发布设置将要求目标计算机上的全局程序集缓存中存在所有相关的程序集,然后才能进行安装。由于GAC中的所有程序集都必须进行强签名,因此任何标记为先决条件但未进行强签名的程序集都会出现此错误。

请查看此链接……它提供了使用强名称对程序集进行签名的说明:


强名称程序集主要是由加密密钥签名的程序集。使用VisualStudio很容易做到这一点,并且不需要对依赖项进行重新排序

我使用的是非express Visual Studio,因此这些步骤可能与您的略有不同

  • 在项目上单击鼠标右键,然后选择“属性”
  • 单击“签名”选项卡
  • 选中“在组件上签名”
  • 在组合框中选择“”
  • 完成向导
  • 重建

要创建强名称,只需转到SDK命令提示符或Visual Studio 200X命令提示符,然后键入以下命令

sn -k sgKey.snk
提及

然后通过运行以下命令将强名称与程序集关联

al /out:MyAssembly.dll MyOldAssembly.dll /keyfile:sgKey.snk

请参阅

检查目标框架是否实际设置为3.5或任何您希望设置为目标的框架。有时,如果设置不正确,它会出错。

在上述解决方案失败后,这对我来说非常有效:


删除对错误程序集的引用,然后再次添加。

我发现问题出在.csproj文件中

<Reference Include="OtherProjectNothingToDo">
  <HintPath>..\..\..\..\Pedidos\XBAP\Pedidos\Pedidos\bin\Release\Pedidos.exe</HintPath>
</Reference>

..\..\..\..\Pedidos\XBAP\Pedidos\Pedidos\bin\Release\Pedidos.exe

然后我用记事本将其删除,现在一切正常。

解决方法比这更简单:

  • 转到你的项目
  • 单击鼠标右键并选择“属性”
  • 转到“安全”选项卡
  • 取消选中启用ClickOnce安全设置
  • 除非您是通过ClickOnce部署此应用程序,否则您不需要strong命名程序集。

    使用解决方案允许我发布,但我发现用户在发布项目后无法安装,因为最终用户系统会抱怨无法安装,并注意硬盘空间。由于这似乎不太可能是根本原因,我进一步研究了它


    显然,我的问题的基础是,我的一个引用也引用了我的项目使用的.dll,但版本不同。ClickOnce没有此功能,并拒绝将.dll的第二个版本复制到用户的系统,理由是该版本已经存在。修复它,使.dll和项目引用了另一个.dll的相同版本,从而删除了错误并更正了安装问题。

    我也遇到了这个问题。在我的例子中,blabla.dll在我的解决方案中被引用,但blabla.dll也在我在项目中引用的另一个.dll中使用

    检查两个blabla.dll的版本时,它们不相同。因此,我用正确的blabla.dll更新了另一个.dll,然后在解决方案中引用了新的另一个.dll。错误消失了

    简而言之:我使用了2个版本的blabla.dll

    如果不让我知道,我希望这是有意义的

    查看我的博客了解更多详细说明:


    你好,雅各布·伊德马

    事实上,在我回答之前,我在研究过程中偶然发现了那一页,那是我不理解的一页。我做了一次,似乎有点帮助。但是,它给出了一个关于另一个依赖项的错误。我忘记了确切的措辞,但我再次使用“”并浏览了该依赖项,现在我得到一个错误:“创建程序集清单时出错:提供程序的版本不正确”。@Jason您在哪里看到该消息?这是对话框还是生成错误?这是底部错误选项卡中的生成错误。我认为浏览该依赖项不是正确的做法,现在我无法摆脱引用。听起来不错,但我找不到发布页面或“应用程序文件”。我如何才能找到它?右键单击项目,选择“属性”。我查看了每个选项卡,单击了属性中的每个按钮,但都找不到它。我的发布页面有位置组合框、语言下拉列表、版本号和3个按钮——先决条件、更新和“立即发布”。先决条件类似于.NET3.5。没有列出我的任何DLL。+1解决了VS 2005中c#project(windows服务)的类似问题,其中包括一个安装程序组件-事实上,错误出现在编译时,我自己没有接触或考虑应用程序属性中的任何“发布”设置…我很快就投了赞成票。我将所有设置都更改为包含,但我的两个程序集仍然存在此问题。