参照設定しているdllのパスを取得する方法を教えて下さい。
例えばc:\testフォルダに.NETで作成したA.dllがあり
dll内には以下の関数があります。
Public Class Class1
Public Shared Function mypath() As String
Return ?????
End Function
End Class
呼び出し側のプロジェクトでA.dllを参照設定して
Class1.mypathを実行した場合、c:\testを返したい。
魔界の仮面弁士様、ありがとうございます。
サンプルをすべて試しましたが、期待する結果が得られません。
dllを"C:\test\ClassLibrary1\ClassLibrary1\bin\Release\ClassLibrary1.dll"に置いて、以下を実行してみました。
希望する結果は"C:\test\ClassLibrary1\ClassLibrary1\bin\Release"を返したいです。
'ClassLibrary1.dll
Public Class Class1
Public Shared Function mypath1() As String
Return System.Reflection.Assembly.GetExecutingAssembly().Location
End Function
Public Shared Function mypath2() As String
Return System.Reflection.Assembly.GetExecutingAssembly().CodeBase
End Function
Public Shared Function mypath3() As String
Return System.Reflection.Assembly.GetExecutingAssembly().EscapedCodeBase
End Function
Public Shared Function mypath4() As String
Return System.Reflection.Assembly.GetEntryAssembly().Location
End Function
Public Shared Function mypath5() As String
Return System.Reflection.Assembly.GetEntryAssembly().CodeBase
End Function
Public Shared Function mypath6() As String
Return System.Reflection.Assembly.GetEntryAssembly().EscapedCodeBase
End Function
Public Shared Function mypath7() As String
Return System.Windows.Forms.Application.ExecutablePath
End Function
Public Shared Function mypath8() As String
Return System.Windows.Forms.Application.StartupPath
End Function
Public Shared Function mypath9() As String
Return My.Application.Info.DirectoryPath
End Function
Public Shared Function mypath10() As String
Return System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase
End Function
Public Shared Function mypath11() As String
Return System.IO.Path.GetDirectoryName( _
System.Reflection.Assembly.GetExecutingAssembly().Location)
End Function
Public Shared Function mypath12() As String
Dim path As String = _
System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase
'URIを通常のパス形式に変換する
Dim u As New Uri(path)
path = u.LocalPath + Uri.UnescapeDataString(u.Fragment)
Return System.IO.Path.GetDirectoryName(path)
End Function
End Class
'呼び出し側
Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Console.WriteLine(ClassLibrary1.Class1.mypath1)
Console.WriteLine(ClassLibrary1.Class1.mypath2)
Console.WriteLine(ClassLibrary1.Class1.mypath3)
Console.WriteLine(ClassLibrary1.Class1.mypath4)
Console.WriteLine(ClassLibrary1.Class1.mypath5)
Console.WriteLine(ClassLibrary1.Class1.mypath6)
Console.WriteLine(ClassLibrary1.Class1.mypath7)
Console.WriteLine(ClassLibrary1.Class1.mypath8)
Console.WriteLine(ClassLibrary1.Class1.mypath9)
Console.WriteLine(ClassLibrary1.Class1.mypath10)
Console.WriteLine(ClassLibrary1.Class1.mypath11)
Console.WriteLine(ClassLibrary1.Class1.mypath12)
'*******************実行結果*************************
'C:\Users\ユーザー名\AppData\Local\Temporary Projects\WindowsApplication1\bin\x86\Debug\ClassLibrary1.dll
'file:///C:/Users/ユーザー名/AppData/Local/Temporary Projects/WindowsApplication1/bin/x86/Debug/ClassLibrary1.DLL
'file:///C:/Users/ユーザー名/AppData/Local/Temporary%20Projects/WindowsApplication1/bin/x86/Debug/ClassLibrary1.DLL
'C:\Users\ユーザー名\AppData\Local\Temporary Projects\WindowsApplication1\bin\x86\Debug\WindowsApplication1.exe
'file:///C:/Users/ユーザー名/AppData/Local/Temporary Projects/WindowsApplication1/bin/x86/Debug/WindowsApplication1.EXE
'file:///C:/Users/ユーザー名/AppData/Local/Temporary%20Projects/WindowsApplication1/bin/x86/Debug/WindowsApplication1.EXE
'C:\Users\ユーザー名\AppData\Local\Temporary Projects\WindowsApplication1\bin\x86\Debug\WindowsApplication1.EXE
'C:\Users\ユーザー名\AppData\Local\Temporary Projects\WindowsApplication1\bin\x86\Debug
'C:\Users\ユーザー名\AppData\Local\Temporary Projects\WindowsApplication1\bin\x86\Debug
'C:\Users\ユーザー名\AppData\Local\Temporary Projects\WindowsApplication1\bin\x86\Debug\
'C:\Users\ユーザー名\AppData\Local\Temporary Projects\WindowsApplication1\bin\x86\Debug
'C:\Users\ユーザー名\AppData\Local\Temporary Projects\WindowsApplication1\bin\x86\Debug
End Sub
End Class