Webサービスを呼び出すために、私はC#.NET 2.0でDLLを作成しました。アセンブリの検索ディレクトリ
SQL Server 2008 R2にDLLを登録した後、このDLLで構成ファイルを読み込むためにディレクトリを取得しようとしました。
Googleで見つかったすべての方法は機能しません。問題はファイルを読み込めないためです。環境に応じて変更することができるため、コード内にいくつかの「ハードパス」を入れたくありません。
私はSQL Server 2008で私のDLLを登録する方法があります:
DROP FUNCTION [Tools].[CallWriteDepot]
GO
DROP FUNCTION [Tools].[CallExtractDepot]
GO
drop assembly SqlAssembly
go
create assembly SqlAssembly
from 'C:\webservices\dll\SqlAssembly.dll'
with permission_set = unsafe
go
---------------------------------------------------------------------------------------------------
CREATE FUNCTION [Tools].[CallWriteDepot](@xmlInputFile [nvarchar](max))
RETURNS [nvarchar](max) WITH EXECUTE AS CALLER
AS
EXTERNAL NAME [SqlAssembly].[SqlAssembly.Main].[writeToSafe]
GO
---------------------------------------------------------------------------------------------------
CREATE FUNCTION [Tools].[CallExtractDepot](@xmlInputFile [nvarchar](max))
RETURNS [nvarchar](max) WITH EXECUTE AS CALLER
AS
EXTERNAL NAME [SqlAssembly].[SqlAssembly.Main].[readFromSafe]
GO
見ての通り、DLLはC:\ Webサービス\ dllファイルの\ SqlAssembly.dll、この道を見つけることは不可能です以下に示すように、DLLコード。いくつかのテストの後に結果があり
:
Assembly.GetAssembly(typeof(SqlAssembly.Main)).CodeBase
Result : empty
attrTest2.Value = Assembly.GetAssembly(typeof(SqlAssembly.Main)).Location
Result : empty
Assembly.GetCallingAssembly().Location
Result : C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\Binn\SqlAccess.dll
Assembly.GetCallingAssembly().GetName().CodeBase
Result : file:///C:/Program Files/Microsoft SQL Server/MSSQL10_50.MSSQLSERVER/MSSQL/Binn/SqlAccess.DLL
Assembly.GetExecutingAssembly().Location
Result : empty
Assembly.GetExecutingAssembly().GetName().CodeBase
Result : empty
Directory.GetCurrentDirectory();
Result : C:\Windows\system32
AppDomain.CurrentDomain.BaseDirectory;
Result : C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\Binn\
Environment.CurrentDirectory;
Result : C:\Windows\system32
誰もがSQL ServerがDLL関数を登録する方法を知っていますか?それはメモリゾーンに関数を保存し、dllファイルをもう読まないようなものです。
誰もがあまりにも解決策を持っている場合、あなたはSQL Serverでアセンブリを作成する場合)
あなたはそうです。だから、私はDLLのディレクトリを調べることができません。最初の解決策は、sys.assembly_filesのdllの完全なパスです。しかし、私はそれが良い方法ではないと思う。だから、私は構成ファイルなしでSQL Serverをスローする私のdllパラメータに与えます。 – BaptX