2010-12-07 8 views
2

、.NET4のためにGACにアセンブリを登録できない私は、いくつかのアプリケーション(IISでWCFサービス)の間で共有することができるモデルクラスを含む厳密な名前のアセンブリを持っている同じマシン上でホストされています。がサーバー2008 R2

代わりのBinフォルダにこのDLLの独自のコピーを持つ各サービス、私はGACに追加します。

Iは.NET4ためGacutil.exeをを使用しています:Microsoft (R) .NET Global Assembly Cache Utility. Version 4.0.30319.1 Copyright (c) Microsoft Corporation. All rights reserved.

DLLはGACに登録するが、C:\Windows\Assembly(GAC 2.0)中に終了する - ないC:\Windows\Microsoft.NET\Assembly(GAC 4)。

私はGACにDLLを登録し、Binフォルダから削除すると、私のアプリケーションはで失敗:

Could not load file or assembly 'MyCompany.Enterprise.BOM' or one of its dependencies. The system cannot find the file specified. at System.Reflection.RuntimeAssembly._nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, RuntimeAssembly locationHint, StackCrawlMark& stackMark, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks)...

注:サーバー2008 R2は、64ビット、アセンブリがMSIL、.NET用に構築されています4.0。 Windows SDK v7.1に付属しているフォルダにあるgacutil.exeを使用しています。

私は何をしないことができますか?私はどのような選択肢も考えられないので、どんな考えも歓迎です。

EDIT(マニフェスト):マニフェストから分かる

// Metadata version: v2.0.50727 
.assembly extern mscorlib 
{ 
    .publickeytoken = (B7 7A 5C 56 19 34 E0 89)       // .z\V.4.. 
    .ver 2:0:0:0 
} 
.assembly extern System.Runtime.Serialization 
{ 
    .publickeytoken = (B7 7A 5C 56 19 34 E0 89)       // .z\V.4.. 
    .ver 3:0:0:0 
} 
.assembly HCS.Enterprise.BOM 
{ 
    .custom instance void [mscorlib]System.Runtime.InteropServices.GuidAttribute::.ctor(string) = (01 00 24 63 31 34 64 39 31 65 32 2D 30 35 31 65 // ..$c14d91e2-051e 
                            2D 34 66 65 31 2D 38 62 37 30 2D 61 36 36 33 66 // -4fe1-8b70-a663f 
                            39 61 37 62 34 33 35 00 00)      // 9a7b435.. 
    .custom instance void [mscorlib]System.Reflection.AssemblyKeyFileAttribute::.ctor(string) = (01 00 20 43 3A 5C 48 43 53 2E 45 6E 74 65 72 70 // .. C:\HCS.Enterp 
                           72 69 73 65 5C 4B 65 79 5C 48 43 53 4B 65 79 2E // rise\Key\HCSKey. 
                           73 6E 6B 00 00)         // snk.. 

    // --- The following custom attribute is added automatically, do not uncomment ------- 
    // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = (01 00 02 00 00 00 00 00) 

    .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilationRelaxationsAttribute::.ctor(int32) = (01 00 08 00 00 00 00 00) 
    .custom instance void [mscorlib]System.Runtime.CompilerServices.RuntimeCompatibilityAttribute::.ctor() = (01 00 01 00 54 02 16 57 72 61 70 4E 6F 6E 45 78 // ....T..WrapNonEx 
                              63 65 70 74 69 6F 6E 54 68 72 6F 77 73 01)  // ceptionThrows. 
    .custom instance void [mscorlib]System.Reflection.AssemblyFileVersionAttribute::.ctor(string) = (01 00 07 31 2E 30 2E 30 2E 30 00 00)    // ...1.0.0.0.. 
    .custom instance void [mscorlib]System.Reflection.AssemblyTitleAttribute::.ctor(string) = (01 00 12 48 43 53 2E 45 6E 74 65 72 70 72 69 73 // ...HCS.Enterpris 
                           65 2E 42 4F 4D 00 00)       // e.BOM.. 
    .custom instance void [mscorlib]System.Reflection.AssemblyDescriptionAttribute::.ctor(string) = (01 00 00 00 00) 
    .custom instance void [mscorlib]System.Reflection.AssemblyConfigurationAttribute::.ctor(string) = (01 00 00 00 00) 
    .custom instance void [mscorlib]System.Reflection.AssemblyCompanyAttribute::.ctor(string) = (01 00 0E 48 6F 72 69 7A 6F 6E 2D 42 43 42 53 4E // ...HN 
                           4A 00 00)          // J.. 
    .custom instance void [mscorlib]System.Reflection.AssemblyProductAttribute::.ctor(string) = (01 00 12 48 43 53 2E 45 6E 74 65 72 70 72 69 73 // ...HCS.Enterpris 
                           65 2E 42 4F 4D 00 00)       // e.BOM.. 
    .custom instance void [mscorlib]System.Reflection.AssemblyCopyrightAttribute::.ctor(string) = (01 00 20 43 6F 70 79 72 69 67 68 74 20 C2 A9 20 // .. Copyright .. 
                            48 6F 72 69 7A 6F 6E 2D 42 43 42 53 4E 4A 20 32 // H2 
                            30 31 30 00 00)         // 010.. 
    .custom instance void [mscorlib]System.Reflection.AssemblyTrademarkAttribute::.ctor(string) = (01 00 00 00 00) 
    .custom instance void [mscorlib]System.Runtime.InteropServices.ComVisibleAttribute::.ctor(bool) = (01 00 00 00 00) 
    .publickey = (00 24 00 00 04 80 00 00 94 00 00 00 06 02 00 00 // .$.............. 
       00 24 00 00 52 53 41 31 00 04 00 00 01 00 01 00 // .$..RSA1........ 
       3B 65 DD 3B C7 49 A7 F4 C9 50 BE 27 F9 62 B6 54 // ;e.;.I...P.'.b.T 
       D1 26 7B DC 5B EF C1 02 59 E8 77 D4 3D F5 2F 50 // .&{.[...Y.w.=./P 
       94 22 AC C3 B7 07 71 A4 99 D4 FF 10 ED 05 6D 70 // ."....q.......mp 
       9A 9D 99 DC 33 1F 8A 3F A5 77 2E C5 5F 9D 35 15 // ....3..?.w.._.5. 
       BA 54 47 47 C2 8B 13 8C 57 57 C6 1E F5 AB 7B D5 // .TGG....WW....{. 
       B8 87 DD 4A F3 69 01 B2 6B C8 88 99 04 09 19 FC // ...J.i..k....... 
       5E 51 7E 2A B9 B5 03 80 C9 A3 EA ED EF B8 EC BF // ^Q~*............ 
       EB 97 30 EC D9 E4 36 7C 0F 64 B7 27 9D 29 0D C5) // ..0...6|.d.'.).. 
    .hash algorithm 0x00008004 
    .ver 1:0:0:0 
} 
.module HCS.Enterprise.BOM.dll 
// MVID: {D4D8B566-6B0D-4F8D-ABD4-C3A1339B4F84} 
.imagebase 0x00400000 
.file alignment 0x00000200 
.stackreserve 0x00100000 
.subsystem 0x0003  // WINDOWS_CUI 
.corflags 0x00000009 // ILONLY 
// Image base: 0x031B0000 
+0

あなたはIldasm.exeを持つアセンブリを見ていると、ここでマニフェストの始まりを投稿してくださいことはできますか? – TToni

+0

@TToni - マニフェストにはv2.0のメタデータが含まれていますが、どうすれば4.0に変更できますか?これはコンパイル時に生成されたものですか? – Leon

答えて

1

ように、DLLはランタイムバージョン2.0なので、4.0の偶数ます。gacutil 2.0 GACに配置されます。

マニフェストはコンパイル時に作成されるので、あなたのプロジェクトおよび/またはコンパイル設定に何か問題がなければなりません。

私は、Visual Studioを使用すると仮定し、そのプロジェクト(ないソリューション)[アプリケーション]タブで設定をチェックしてください。

+0

ありがとう!つまり、プロジェクトは.NET 3.5をターゲットに設定されていました。 DLLは.NET 4.0のみがインストールされているマシンで正常に動作しますが、Binフォルダになければなりません。これは、.NET2と.NET3.5と.NET4のアプリケーション間で共有されているため、.NET 2.0のままにする必要があります。 – Leon

関連する問題