2013-04-23 9 views
7

私が使用するアプリは、.NET .configファイルを解釈します。私は私が.exe.configが常駐その正確なフォルダから実行したときにアプリがのみ動作した、それはしかし ファイルに対して.configファイルのパスを指定する方法は?

<add key="Certificate" value="..\certificate.abc"/> 

を必要とする証明書へのパスを指定する行を追加しました。別のフォルダから実行すると、作業ディレクトリに対して ../が展開された で証明書を検索するため、失敗します。

設定ファイルの代わりに、..\certificate.abcが展開されたであることを確認するために、設定ファイルに何を書き込む必要がありますか?

私はアプリを変更できません(それは私のものではありません)、私は設定ファイルのみを変更できます。

+2

これが単なる鍵であれば、鍵の値を読んだらコード内でこれを行うことになります。 –

答えて

5

チルダ

value="~/certificate.abc" 
+1

チルダについてはどこで知りましたか?私はこれを見つけることができません。 –

0

を使用することで、私はあなたのケースであなたが設定したファイル名が必要だと思います。

、どこにパスを使用する必要があります - 現在のアプリケーションの場所(実行時に入ったことができる)と設定

からキーを組み合わせて - (../せずにフォルダを設定したフォルダがcangedできる場合)あなたが知っているすべてのファイルをフォルダ

または使用

System.Web.HttpContext.Current.Server.MapPath("~/[PARTH_TO_FILE]") ' 
+0

回答を編集して他の人の回答をコピーする必要はありません。 – SpaceApple

1

設定ファイルを変更するだけでは変更できません。あなたが絶対パスを使用しない限り。

これはasp.netアプリケーションである場合は、Server.MapPathを使用し、その後、...

をアプリケーションを変更することができます。それがWindowsアプリケーションの場合は、実行中のアプリケーションのディレクトリを取得し、それを設定ファイルの相対パスと組み合わせる必要があります。

System.Reflection.Assembly.GetExecutingAssembly().Locationは、.EXEファイルへのパスを提供します。次にPath.Combineと呼んで、相対パスとアプリケーションのパスを結合することができます。

1

設定ファイルは、実行ファイル以外の場所に置くことができます。あなたがmantionを実行するパスとして私はこれがデスクトップベースのアプリケーションだと理解していますので、ここでこれを行うことができます。

in Config。

<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); 
      } 
0

ビジュアルスタジオ2015では、「〜」キーワードは機能しなくなりました。 あなたが今使用することができます。

value="folder\subfoler" 

「フォルダ」.exeファイル

0

..\フォルダレベルを上がると同じレベルを持っています。必要な回数だけ繰り返します。 ..\..\を使用してbinフォルダに移動します。

関連する問題