|
|
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Fusion\EnableLog を DWORD で 1 にする
事によって、エラー時の情報の詳細を取得する
| |
|
↓出力例
|
=== 事前バインド状態情報 ===
ログ: ユーザー = NIGHT\Administrator
ログ: DisplayName = Class1, Version=0.0.0.0, Culture=neutral, PublicKeyToken=4917fcd39bf39de9
(Fully-specified)
ログ: Appbase = file:///C:/user/web/vbclass/refTest/vb_build/
ログ: Initial PrivatePath = NULL
呼び出しているアセンブリ: Module1, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null
===
ログ: このバインドは default の読み込みコンテキストで開始します。
ログ: 構成ファイルにプライベート パスのヒントが見つかりました: aaa
ログ: アプリケーション構成ファイル C:\user\web\vbclass\refTest\vb_build\Module1.exe.config を使用します。
ログ: C:\WINNT\Microsoft.NET\Framework\v2.0.50727\config\machine.config からのコンピュータ構成ファイルを使用します。
ログ: ポリシー後の参照: Class1, Version=0.0.0.0, Culture=neutral, PublicKeyToken=4917fcd39bf39de9
ログ: 新しい URL file:///C:/user/web/vbclass/refTest/vb_build_dll/Class.dll をダウンロードしようとしています。
| |
|
|
Visual Studio が作成する AssemblyInfo.vb の例 |
|
|
Imports System
Imports System.Reflection
Imports System.Runtime.InteropServices
' アセンブリに関する一般情報は以下の属性セットをとおして制御されます。
' アセンブリに関連付けられている情報を変更するには、
' これらの属性値を変更してください。
' アセンブリ属性の値を確認します。
<Assembly: AssemblyTitle("ConsoleApplication1")>
<Assembly: AssemblyDescription("")>
<Assembly: AssemblyCompany("lightbox")>
<Assembly: AssemblyProduct("ConsoleApplication1")>
<Assembly: AssemblyCopyright("Copyright (C) lightbox 2007")>
<Assembly: AssemblyTrademark("")>
<Assembly: ComVisible(False)>
'このプロジェクトが COM に公開される場合、次の GUID がタイプ ライブラリの ID になります。
<Assembly: Guid("2313de5b-d930-4a02-96e2-20bf7df94222")>
' アセンブリのバージョン情報は、以下の 4 つの値で構成されています:
'
' Major Version
' Minor Version
' Build Number
' Revision
'
' すべての値を指定するか、下のように '*' を使ってビルドおよびリビジョン番号を
' 既定値にすることができます:
' <Assembly: AssemblyVersion("1.0.*")>
<Assembly: AssemblyVersion("1.0.0.0")>
<Assembly: AssemblyFileVersion("1.0.0.0")>
| |
|
|
厳密な名前の無いクラスライブラリ ( プライベート ) |
|
myClass.vb
|
Imports System.Reflection
<Assembly: AssemblyVersion("1.0.0.0")>
Namespace Lightbox
Public Class Tool
' ********************************************************
' (トークン配列化関数)
' ********************************************************
Public Function GetArray(ByVal str As String, ByVal d As String) As String()
' 区切り文字定義
Dim delimStr As String = d
Dim delimiter As Char() = delimStr.ToCharArray()
' 分解
Dim aRet As String() = str.Split(delimiter)
Return aRet
End Function
' ********************************************************
' (プログラムが実行されているディレクトリを取得)
' ********************************************************
Public Function GetProgramDir() As String
Dim ab As Reflection.Assembly = Reflection.Assembly.GetEntryAssembly ()
Dim mds As Reflection.Module() = ab.GetModules()
Dim md As Reflection.Module = mds(0)
' ************************************************
' ディレクトリ部分を取得
' ( System.IO.Path.GetDirectoryName が簡単 )
' ************************************************
Dim aDataDir As String() = GetArray(md.FullyQualifiedName, "\")
Dim pgDir As String = String.Join("\", aDataDir, 0, aDataDir.Length - 1)
Return pgDir
End Function
End Class
End Namespace
| |
|
↓ビルド
|
vbc.exe /target:library /out:lbox.dll myClass.vb
| |
|
↓厳密な名前の確認
|
vb.net>sn -T lbox.dll
Microsoft(R) .NET Framework Strong Name Utility バージョン 2.0.50727.42
Copyright (c) Microsoft Corporation. All rights reserved.
lbox.dll は厳密な名前のアセンブリではありません。
| |
|
|
呼び出しコードとクラスライブラリのデフォルトの配置場所 |
|
myModule.vb
|
Imports Lightbox
Module Module1
Sub Main()
Dim lb As Tool = New Tool
Console.WriteLine(lb.GetProgramDir())
End Sub
End Module
| |
|
↓ビルド( lbox.dll は、おなじディレクトリにあります )
|
vbc.exe /reference:./lbox.dll myModule.vb
| |
|
|
=== 事前バインド状態情報 ===
ログ: ユーザー = NIGHT\Administrator
ログ: DisplayName = lbox, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
(Fully-specified)
ログ: Appbase = file:///C:/user/web/vbclass/ClassLIB/
ログ: Initial PrivatePath = NULL
呼び出しているアセンブリ: myModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null
===
ログ: このバインドは default の読み込みコンテキストで開始します。
ログ: アプリケーション構成ファイルは見つかりませんでした。
ログ: C:\WINNT\Microsoft.NET\Framework\v2.0.50727\config\machine.config からのコンピュータ構成ファイルを使用します。
ログ: 現時点でポリシーは参照に適用されません (プライベート、カスタム、部分的、または場所ベースのアセンブリ バインド)。
ログ: 新しい URL file:///C:/user/web/vbclass/ClassLIB/lbox.DLL をダウンロードしようとしています。
ログ: 新しい URL file:///C:/user/web/vbclass/ClassLIB/lbox/lbox.DLL をダウンロードしようとしています。
ログ: 新しい URL file:///C:/user/web/vbclass/ClassLIB/lbox.EXE をダウンロードしようとしています。
ログ: 新しい URL file:///C:/user/web/vbclass/ClassLIB/lbox/lbox.EXE をダウンロードしようとしています。
| |
|
|
|
myModule.exe.config ファイルの作成
|
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<probing privatePath="myClass"/>
</assemblyBinding>
</runtime>
</configuration>
| |
|
|
=== 事前バインド状態情報 ===
ログ: ユーザー = NIGHT\Administrator
ログ: DisplayName = lbox, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
(Fully-specified)
ログ: Appbase = file:///C:/user/web/vbclass/ClassLIB/
ログ: Initial PrivatePath = NULL
呼び出しているアセンブリ: myModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null
===
ログ: このバインドは default の読み込みコンテキストで開始します。
ログ: 構成ファイルにプライベート パスのヒントが見つかりました: myClass
ログ: アプリケーション構成ファイル C:\user\web\vbclass\ClassLIB\myModule.exe.config を使用します。
ログ: C:\WINNT\Microsoft.NET\Framework\v2.0.50727\config\machine.config からのコンピュータ構成ファイルを使用します。
ログ: 現時点でポリシーは参照に適用されません (プライベート、カスタム、部分的、または場所ベースのアセンブリ バインド)。
ログ: 新しい URL file:///C:/user/web/vbclass/ClassLIB/lbox.DLL をダウンロードしようとしています。
ログ: 新しい URL file:///C:/user/web/vbclass/ClassLIB/lbox/lbox.DLL をダウンロードしようとしています。
ログ: 新しい URL file:///C:/user/web/vbclass/ClassLIB/myClass/lbox.DLL をダウンロードしようとしています。
ログ: 新しい URL file:///C:/user/web/vbclass/ClassLIB/myClass/lbox/lbox.DLL をダウンロードしようとしています。
ログ: 新しい URL file:///C:/user/web/vbclass/ClassLIB/lbox.EXE をダウンロードしようとしています。
ログ: 新しい URL file:///C:/user/web/vbclass/ClassLIB/lbox/lbox.EXE をダウンロードしようとしています。
ログ: 新しい URL file:///C:/user/web/vbclass/ClassLIB/myClass/lbox.EXE をダウンロードしようとしています。
| |
|
|
|
C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\Bin にある sn.exe
( 例 sn -k bonurd )
|
Imports System.Reflection
<Assembly: AssemblyKeyFile("bonurd.snk")>
<Assembly: AssemblyVersion("1.0.0.0")>
Namespace Lightbox
Public Class Tool
' ********************************************************
' (トークン配列化関数)
' ********************************************************
Public Function GetArray(ByVal str As String, ByVal d As String) As String()
' 区切り文字定義
Dim delimStr As String = d
Dim delimiter As Char() = delimStr.ToCharArray()
' 分解
Dim aRet As String() = str.Split(delimiter)
Return aRet
End Function
' ********************************************************
' (プログラムが実行されているディレクトリを取得)
' ********************************************************
Public Function GetProgramDir() As String
Dim ab As Reflection.Assembly = Reflection.Assembly.GetEntryAssembly ()
Dim mds As Reflection.Module() = ab.GetModules()
Dim md As Reflection.Module = mds(0)
' ************************************************
' ディレクトリ部分を取得
' ( System.IO.Path.GetDirectoryName が簡単 )
' ************************************************
Dim aDataDir As String() = GetArray(md.FullyQualifiedName, "\")
Dim pgDir As String = String.Join("\", aDataDir, 0, aDataDir.Length - 1)
Return pgDir
End Function
End Class
End Namespace
| |
|
|
vb.net>sn -T lbox.dll
Microsoft(R) .NET Framework Strong Name Utility バージョン 2.0.50727.42
Copyright (c) Microsoft Corporation. All rights reserved.
公開キー トークン 2138cc86b120e333
| |
|
|
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<probing privatePath="myClass"/>
<dependentAssembly>
<assemblyIdentity name="lbox" culture="neutral" publicKeyToken="2138cc86b120e333"/>
<codeBase version="1.0.0.0" href="C:\temp\lbox.dll"/>
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
| |
|
|
|