私が使用するアプリは、.NET .config
ファイルを解釈します。必要な証明書へのパスを指定する行を追加しました
<add key="Certificate" value="..\certificate.abc"/>
ただし、アプリは、.exe
と.config
が存在する正確なフォルダーから実行した場合にのみ機能することがわかりました。別のフォルダから実行した場合、../
拡張作業ディレクトリに対してで証明書を検索するため、失敗します。
パスが..\certificate.abc
展開されていることを確認するには、構成ファイルに何を書き込む必要がありますか構成ファイルに対して作業ディレクトリではありませんか?
私はアプリを変更できません(それは私のものではありません)、私は設定ファイルしか変更できません。
チルダを使用して
value="~/certificate.abc"
Visual Studio 2015では、「〜」キーワードは機能しなくなりました。これで使用できます:
value="folder\subfoler"
「フォルダ」は.exeファイルと同じレベルです
..\
フォルダレベルが上がります。必要な回数だけ繰り返します。 ..\..\
ビンフォルダに移動します。
設定ファイルを変更するだけでは、これを変更することはできません。絶対パスを使用しない限り。
アプリケーションを変更できる場合...
これがasp.netアプリケーションの場合は、_Server.MapPath
_を使用します。 Windowsアプリの場合は、実行中のアプリケーションのディレクトリを取得し、それを構成ファイルの相対パスと組み合わせる必要があります。
System.Reflection.Assembly.GetExecutingAssembly().Location
は、.EXEファイルへのパスを提供します。次に、 Path.Combine を呼び出して、相対パスをアプリケーションのパスと組み合わせることができます。
あなたの場合、ファイル名を設定する必要があると思います。あなたが知っているすべてのファイルがあるフォルダ(フォルダを変更できる場合-.. /なしでフォルダを設定します)
そして、パスを使用する必要がある場合-アプリケーションの現在の場所(実行時に取得できます)と設定からのキーを組み合わせます
または使用する
System.Web.HttpContext.Current.Server.MapPath("~/[PARTH_TO_FILE]") '
設定ファイルは、実行ファイル以外の場所にある可能性があります。実行パスを指定すると、これがデスクトップベースのアプリケーションであることがわかります。ここでは、このようにできることを説明します。
構成で。
<setting name="FilePath" serializeAs="String">
<value>AppPath\MyFile.abc</value>
</setting>
そしてこれを取り戻すために。
var path = System.Configuration.ConfigurationManager.AppSettings["FilePath"];
if (path !=null && path.Contains("AppPath"))
{
var filepath = System.IO.Path.Combine(
System.Reflection.Assembly.GetExecutingAssembly().Location,
path.Replace("AppPath", string.Empty).ToString());
Console.WriteLine(filepath);
}