我正在编写一个Visual Studio 2012扩展,供内部使用,它要求所有程序集都有一个强名称。我依赖于RestSharp(以及其他一些dll),因为它没有强名称,我通过跟随this为它添加了一个强名称。一切都根据流程的输出工作,甚至视觉工作室声称,如果我在项目引用中查看RestSharp.dll的属性,它就会被强烈命名。但是,当我去使用我的扩展时,我得到一个FileLoadException声明:
Could not load file or assembly 'RestSharp, Version=104.1.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. A strongly-named assembly is required. (Exception from HRESULT: 0x80131044)
有关如何解决此问题或解决此问题的任何想法?
答案 0 :(得分:5)
我编写了一个NuGet解决方案级别包,以帮助您使用自己的密钥命名第三方程序集。
这是为了签署NuGet包的内容 使用无符号程序集,以便能够链接到这些 消费项目被强烈命名的包。访问 原始源代码不是必需的,您可以签署任何程序集 使用您自己强大的命名键。如果需要,您也可以延迟签名。
您可以在我的博客上阅读更多相关信息:
http://www.nivot.org/blog/post/2013/04/30/Signing-unsigned-assemblies-in-NuGet-packages
答案 1 :(得分:1)
我尝试使用VSPackage中的RestSharp并且它可以正常工作。我添加RestSharp的步骤:
在我将使用它的项目中添加NuGet的RestSharp。要执行此操作,请在解决方案资源管理器中右键单击项目,然后选择“管理NuGet包...”,找到RestSharp并按“安装”按钮。
在此项目中编写测试代码:
var test = new RestSharp.RestClient("http://test.com");
Logger.Log(Category.Info, "Test {0}", test.BaseUrl);
在安装程序项目中通过NuGet添加RestSharp。同样第1段。我使用VSIX Deployment Package。要设置必要的程序集,只需要在VSIX Deployment Package中添加对程序集的引用。这使得“管理NuGet包...”命令。通过VS向导创建VSPackage时,VSPackage的主项目是VSIX Deployment Package。
如果您使用VS扩展的另一种安装方法(例如,MSI安装程序),则需要将RestSharp.dll显式添加到我们的安装包中。
结果,我在日志中找到“Test http://test.com”行。
在您的情况下,很可能是没有安装RestSharp.dll,因此在加载模块时VS没有找到RestSharp.dll。或者,已安装的RestSharp程序集的完全限定名称与项目“引用”中的完全限定名称程序集不同。要查看此内容,请查看扩展文件夹中的RestSharp.dll文件(默认情况下为VSPackage补丁为“%LOCALAPPDATA%\ MICROSOFT \ VISUALSTUDIO \ 11.0EXP \ EXTENSIONS \ {YourCompanyName} \ {YourProductName} \ {YourProductVersion} \“)。如果在调试器下运行扩展,您可以在模块窗口中看到扩展的绝对路径。
编辑:我刚才注意到NuGet的RestSharp程序集没有强名称。所以安装的扩展目录和项目的引用应该包含具有强名称的完全相同的程序集,一切都会正常工作。
答案 2 :(得分:0)
您可以检查一些事项:
看来你的项目依旧是对无符号的dll。\ RestSharp.dll。您应该根据签名。\ Signed \ RestSharp.dll dll编译项目。删除当前引用并再次添加。
同时检查项目bin目录中的dll。旧的RestSharp.dll可能仍然存在。删除它并检查所有构建目录。
您还可以检查restsharp.dll是否在您的GAC中。如果是这样,请从你的gac中删除dll。