2017-07-10 4 views
0

私は素晴らしいコードをいくつか持っています。私はXMLファイルに書き込む部分を作成し、これをビルドしてDebugフォルダから.exeを実行すると、すべて問題なしで書き込まれます。この問題は、インストーラを公開したときにIOエラーが発生し、ファイルが見つかりませんでした。 Clickonceインストーラーのデプロイ時にファイルI/O例外が見つかりませんでした。C#

/// <summary> 
    /// Injects new user data into credentials XML 
    /// </summary> 
    /// <param name="username"></param> 
    /// <param name="password"></param> 
    /// <param name="xmlSource"></param> 
    public static void AddUser(string username, string password) 
    { 
     string xmlPath = Path.Combine(Environment.CurrentDirectory, @"Data\Credential.xml"); 
     XDocument doc = XDocument.Load(xmlPath); 
     XElement user = doc.Element("Users"); 
     user.Add(new XElement("User", 
        new XElement("username", username), 
        new XElement("password", password))); 
     doc.Save(xmlPath); 
    } 

xmlPathが最終的に現在のディレクトリを取得してDataディレクトリを追加し、XMLに書き込み

ワンピースは、XMLファイルにリンクします。 Clickonceインストーラを実行した場合にのみ、クラッシュする原因は何ですか?リソースタイプを特別なものに変更する必要がありますか?

+0

パスをログ(またはエラーメッセージ)に出力してみてください。私はCurrentDirectoryがあなたが期待しているものではないと思います。 – Steveland83

答えて

0

Assemblyの実際のパスを取得しようとしましたか?以下のようになります

var path = System.Reflection.Assembly.GetExecutingAssembly().Location; 
var dir= Path.GetDirectoryName(exePath); 
var youdatafolder = Path.Combine(dir, "/Data"); 

IOExceptionをキャッチして、そのフォルダが現在のコードで何を探しているかを確認できます。それはあなたにいくつかのヒントを与えるかもしれません。

関連する問題