3

アドバンストインストーラでは、インストール時に接続文字列を暗号化するカスタムアクションを作成しようとしています。アドバンストインストーラ(13.3)でカスタム文字列を暗号化する方法カスタムアクション

ここでは「〜」を使用できないようです。 (MVCプロジェクトの作業コードをここに移動しました)。

この行には簡単な代替方法がありますか、完全に書き直して使用する必要があります。 System.Reflection.TargetInvocationException:例外が呼び出しの ターゲットによってスローされています---> System.ArgumentExceptionの:。 カスタムアクションによってスローされ、このModifying Web.Config During Installation

例外のようなストリームのsomekindを使用するソリューション(相対仮想パス「〜」は、ここで許可されていないアプリケーション

カスタムアクション:。

[CustomAction] 
public static ActionResult EncryptConnStr(Session session) 
{ 
    try 
    { 
     var config = WebConfigurationManager.OpenWebConfiguration("~"); 
     var section = (ConnectionStringsSection)config.GetSection("connectionStrings"); 
     var cms = section.ConnectionStrings[GetConnectionStringName()]; 
     var connStr = BuildConnStr(session["CONN_STR_SERVER"], session["CONN_STR_DATABASE"], session["CONN_STR_USERNAME"], session["CONN_STR_PASSWORD"]); 

     if (cms == null) 
     { 
      // Add new Connection String 
      section.ConnectionStrings.Add(new ConnectionStringSettings(GetConnectionStringName(), connStr)); 
     } 
     else 
     { 
      // Update existing Connection String 
      cms.ConnectionString = connStr; 
     } 

     // Encrypt 
     section.SectionInformation.ProtectSection(ConnStrEncryptionKey); 

     // Save the configuration file. 
     config.Save(ConfigurationSaveMode.Modified); 

     return ActionResult.Success; 
    } 
    catch (Exception ex) 
    { 
     MessageBox.Show(ex.StackTrace, ex.Message); 
     throw; 
    } 
} 
+0

https://solutiondesign.com/blog/-/blogs/a-simple-trick-to-centralize-your-net-configurati-1/ – Ravikumar

答えて

0

パスの問題に対する解決策は、を使用することですウェブ版ではなく、このようなマッピングをしている長いバージョンWebConfigurationManager

var map = new ExeConfigurationFileMap { ExeConfigFilename = path }; 
Configuration config = ConfigurationManager.OpenMappedExeConfiguration(map, ConfigurationUserLevel.None); 

コードは、ですが、実行時間が早いことであるための保存の問題がまだ解決されていないよう暗号化が正常に動作します。インストールは完了せず、web.configはまだAPPDIRにコピーされていません。

関連する問題