私は現在、脳のおならをしています。.NETWebサイトのクラスライブラリによって読み込まれる一連のファイルがあります。問題は、ファイルが3つの異なるサイト(すべてのサイトがクラスライブラリを参照している)で使用されているため、3つすべてにファイルをコピーしたくないということです。私がやりたいのは、クラスライブラリ自体に共有リソースとして次のようなフォルダを作成することです。
ClassLib
\Templates
-file1.xml
-file2.pdf
-MyClass.cs
MyClassにTemplatesディレクトリからファイルを読み取らせます。MyClass.csがページから呼び出されることを除いて、十分に簡単です。それをDefault.aspxと呼びましょう。これで、MyClass.csには次のようなコードが含まれます。
IList<string> files = GetTemplateFiles(); // returns the path to the template files e.g. Templates/file1.xml
foreach (string file in files) {
if (File.Exists(file)) {
// do things here...
}
}
File.Existsは常にfalseです。これは、ClassLibへのパス(のようなものC:\Projects\Shared\MyLib\)ではなく、デフォルトのディレクトリを検索しているためと思われます。AppDomain.CurrentDomain.BaseDirectoryこれは、それを呼び出しているWebサイトによって異なるため、使用できません。テンプレートは、呼び出し元のアプリケーションではなく、クラスライブラリのTemplatesディレクトリから常に利用可能である必要があります。のプロパティAssembly.GetExecutingAssembly()もあまり役に立たないようで、ASP.NET一時ファイルを指しています。
基本的に私の質問は、これを処理するための最良の方法は何であるかということです。テンプレートファイルは、すべてのアプリケーションで利用できる共有リソースである必要があります(各アプリケーションの3つのテンプレート/ディレクトリにコピー/貼り付けしないでください)が、特定の時間にどのアプリケーションがそれを呼び出すかわからないため、ハードを避ける必要があります-テンプレートフォルダへのファイルパスをコーディングします。テンプレートファイルを取得しようとしている方法で小さいが重要なものが欠けていますが、正確に何を理解することはできません。