ビンディレクトリにあることがわかっているライブラリの "Foo.dll"のようなファイル名があります。私はそれのためのアセンブリオブジェクトを作成したいと思います。私はページではないクラスからこのオブジェクトをインスタンス化しようとしているので、パスを取得するためのRequestオブジェクトを持っていません。 Assembly.Load()の使用に必要なパスを取得するにはどうすればよいですか?ASP.NETのビンからアセンブリをロード
答えて
Assembly.Loadにはファイルパスが必要ではなく、AssemblyNameが必要です。アセンブリが標準の検索パス(binディレクトリ)にあることがわかっている場合、アセンブリのディスクパスを知る必要はありません。そのアセンブリ名を知る必要があります。あなたのアセンブリの場合は、あなたが特定のバージョン、文化などを必要としないと仮定すると、アセンブリ名は、単に「フー」でなければなりません:
Assembly fooAssembly = Assembly.Load("Foo");
あなたが特定のバージョンをロードする必要がない場合は、
Assembly fooAssembly = Assembly.Load("Foo, Version=1.1.2, Culture=neutral");
は一般的に、あなたはAssembly.Loadはなく、Assembly.LoadFromまたはAssembly.LoadFileを使用したい:次の操作を行います。 LoadFromとLoadFileは標準フュージョンプロセスの外で動作し、複数回ロードされたアセンブリ、安全でない場所からロードされたアセンブリなどにつながります。Assembly.Loadは、標準的なロードを実行し、bin、GAC標準のセキュリティチェックをすべて適用します。
Assembly.LoadFile(...)は機能しますか?
絶対パスがわかっているかどうか確かめてください。私はそれが質問の重要な部分だと思います。 –
あなたの説明から、これはWebアプリケーションのように聞こえるので、要求から生成した非同期スレッドでなければ、まだHttpContext
にアクセスする必要があります。そこから、必要なファイルにServer.MapPath()を使用することができます。
私が使用している完全な例です。
[TestMethod()]
public void ReadAssemblyResourceFileTest()
{
var res = SetupEngine.ReadAssemblyResourceFile("newdb.sql");
Assert.IsNotNull(res);
}
PS:リソースは、DLLライブラリ(議会)のルートの下のフォルダ
public static string ReadAssemblyResourceFile(string resourcefilename)
{
using (var stream = Assembly.Load("GM.B2U.DAL").GetManifestResourceStream("GM.B2U.DAL.Resources."
+ resourcefilename)) {
if (stream == null) throw new MyExceptionDoNotLog($"GM.B2U.DAL.Resources.{resourcefilename} not found in the Assembly GM.B2U.DAL.dll !");
using (var reader = new StreamReader(stream))
{
return reader.ReadToEnd();
}
}
}
関数を呼び出すためです。各リソースファイルの "ビルドアクション"を "埋め込みリソース"(プロパティウィンドウ内)としてマークすることを忘れないでください。
- 1. ASP.NETは、すべてのアセンブリをビンからAppDomainにロードしますか?
- 2. ASP.NET COREのバイトからアセンブリをロード
- 3. ビン内の非アセンブリDLL
- 4. ビン内のASP.NETアンロードアセンブリ
- 5. アセンブリとフックアップイベントからサーバコントロールをロードする
- 6. .NETアセンブリからプロジェクト設定をロード
- 7. アセンブリからResourceDictionaryをロードする
- 8. .NETからWinRTアセンブリをロードする
- 9. ネットワークからアセンブリをロードする
- 10. "System.Web.HttpContext"アセンブリを "System.Web"アセンブリからロードできませんでした
- 11. ASP.Net MVC 3他のアセンブリからのイメージ
- 12. はアセンブリからタイプをロードできませんでした - ASP.NETコア
- 13. ASP.NET Core TypeLoadExceptionアセンブリ 'System.Web'から 'System.Web.PreApplicationStartMethodAttribute'タイプをロードできませんでした。
- 14. ASP.NET:コードビハインドからフラッシュムービーをロード
- 15. asp.netプロジェクトからDLL(アセンブリ)をパッケージから削除するには?
- 16. XAMLの別のアセンブリのresxファイルからイメージをロード
- 17. アセンブリからインターフェイスをロードし、そのメソッドを使用します。
- 18. GACから特定のバージョンのアセンブリをロードする方法
- 19. Asp.Netアセンブリ:Asp.Netアセンブリのスロー例外を反映する
- 20. Log4net構成をMonoのアセンブリからロードする
- 21. /binディレクトリからすべてのアセンブリをロードする方法
- 22. .NETコアのストリームからアセンブリをロードする方法
- 23. C#のリソース/アセンブリからExcelファイルをロードする
- 24. Asp.net、DLLからのサーバーコントロールの動的ロード
- 25. コントローラが別のアセンブリからロードされていませんか?
- 26. asp.net mvc .mdfファイルからデータベースをロード
- 27. asp.netコアは、アセンブリ
- 28. ワイルドカードを使用してアセンブリをGACからロードする方法
- 29. ロードされたアセンブリからの画像リソースへのアクセス
- 30. 'System.Reflection.IntrospectionExtensions'をアセンブリ 'mscorlibからロードできませんでした
代わりに、すでにそのアセンブリに型のオブジェクトがある場合は、 のようにすることができます:obj.GetType()。Assembly –