13

内部使用のために、すべてのアセンブリに厳密な名前が必要な Visual Studio 2012 拡張機能を作成しています。私は RestSharp (および他のいくつかの dll) に依存しており、厳密な名前が付けられていないため、これに従って厳密な名前を追加しています。プロセスの出力に従ってすべてが機能し、プロジェクト リファレンスで RestSharp.dll のプロパティを見ると、ビジュアル スタジオでさえ、厳密に名前が付けられていると主張しています。ただし、拡張機能を使用すると、次のように主張する FileLoadException が発生します。

ファイルまたはアセンブリ 'RestSharp、Version=104.1.0.0、Culture=neutral、PublicKeyToken=null' またはその依存関係の 1 つを読み込めませんでした。厳密な名前のアセンブリが必要です。(HRESULT からの例外: 0x80131044)

これを解決する方法または回避する方法について何か考えはありますか?

4

3 に答える 3

5

独自のキーを使用してサード パーティ製アセンブリに厳密な名前を付けるのに役立つ NuGet ソリューション レベル パッケージを作成しました。

これは、署名されていないアセンブリを使用している NuGet パッケージのコンテンツに署名することを目的としており、使用するプロジェクトが厳密に指定されているこれらのパッケージにリンクできるようにします。元のソース コードにアクセスする必要はなく、独自の厳密な名前付けキーを使用して任意のアセンブリに署名できます。必要に応じて、署名を遅らせることもできます。

https://nuget.org/packages/Nivot.StrongNaming

詳細については、私のブログをご覧ください。

http://www.nivot.org/blog/post/2013/04/30/Signing-unsigned-assemblies-in-NuGet-packages

于 2013-05-12T21:56:03.313 に答える
1

VSPackage から RestSharp を使用しようとしましたが、動作します。RestSharp を追加する私の手順:

  1. 使用するプロジェクトにNuGetでRestSharpを追加します。これを行うには、ソリューション エクスプローラーでプロジェクトを右クリックし、[NuGet パッケージの管理] を選択し、RestSharp を見つけて [インストール] ボタンを押します。

  2. このプロジェクトにテスト コードを記述します。

    
    var test = new RestSharp.RestClient("http://test.com");
    Logger.Log(Category.Info, "Test {0}", test.BaseUrl);
    
  3. インストーラー プロジェクトに NuGet で RestSharp を追加します。同様に段落 1. VSIX 展開パッケージを使用します。必要なアセンブリを設定するには、VSIX 展開パッケージにアセンブリへの参照を追加するだけです。これにより、「NuGet パッケージの管理…」コマンドが作成されます。VS Wizard で VSPackage を作成する場合、VSPackage のメイン プロジェクトは VSIX 展開パッケージです。

    別の方法で 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 アセンブリに厳密な名前がないことに気付きました。したがって、インストールされた拡張機能のディレクトリとプロジェクトの参照には、厳密な名前のまったく同じアセンブリが含まれている必要があり、すべてが正常に機能します。

于 2012-12-24T17:58:46.290 に答える
0

A few things you can check:

It seems you project refrence is still to the unsigned dll .\RestSharp.dll. You should compile your project against the signed .\Signed\RestSharp.dll dll. Remove the current refrences and add the again.

Also check the dll in the bin directory of your project. It's possible the old RestSharp.dll is still there. Remove it and check all build directories.

You can also check if the restsharp.dll is in you GAC. If so remove the dll from your gac.

于 2012-12-21T15:04:56.023 に答える