2009-08-24 15 views
4

カスタムアクションで製品をインストールする際に、web.configファイルのカスタム構成セクションを更新しようとしています。インストーラが実行されてインストーラクラスがロードされた後、 Configuration.GetSectionがWindowsシステムディレクトリからカスタムセクションクラスをロードしようとしているときにFile Not Found例外をスローしました。私は、Windowsシステムディレクトリに必要なアセンブリをコピーすることでこれを動作させることができましたが、これは理想的な解決策ではありません。常にそのディレクトリにアクセスできるという保証はありません。インストーラクラスのカスタム構成セクションを編集する

どのようにこの問題を解決できますか?

私の更新コードは、この

[RunInstaller(true)] 
public partial class ProjectInstaller : Installer 
{ 
    public override void Install(System.Collections.IDictionary stateSaver) 
    { 
     //some code here 
     webConfig = WebConfigurationManager.OpenWebConfiguration("MyService"); 
     MyCustomSection mySection = webconfig.GetSection("MyCustomSection") //<--File Not Found: CustomConfigSections.dll 
     //Update config section and save config 
    } 
} 

のように見える私の設定ファイルはこの

<configuration> 
    <configSections> 
     <section name="myCustomSection" type="CustomConfigSections.MyCustomSection, CustomConfigSections" /> 
    </configSections> 
    <myCustomSection> 
     <!-- some config here --> 
    </myCustomSection> 
</configuration> 
+0

解決しましたか?私は同じ問題を抱えている。私はAppSettingsにはうまくアクセスできますが、ConfigHandlerを読み込むために必要なDLLはインストールの一部ですが、フォルダ内にあるように見えますがアクセスできません。 これは役に立つかもしれないと思っていますが、これまでの運はありません。 AppDomain currentDomain = AppDomain.CurrentDomain; currentDomain.AssemblyResolve + =新しいResolveEventHandler(MyResolveEventHandler); – Junto

+0

私はもう少し良い解決策を見つけました。 Orcaを使用してmsiを編集して、順序を変更してアセンブリを展開し、カスタムアクションを実行する前にGACに配置することができます。まだ理想的ではありませんが、以前よりも良いです。 –

答えて

1

のように見えますが、あなたが答えにそれが意図されている方法を理解するであろうと思います。

プロジェクトを出力するようにインストーラをセットアップしたとします。そうでない場合 インストーラプロジェクトを右クリックします。[追加] - [プロジェクト出力]をクリックして、プロジェクト を選択し、コードを引き続き使用できます。

さらには、.NETものを除くDLLを使用している場合は、インストールの使用BeforeInstallイベント ハンドラの前に要素を読んで、あなたのファイルを読み込む試してみたい場合は=真

をcopylocalためにそこ プロパティを変更してください。 >を選択し、プライマリ - > [アプリケーションフォルダを選択 - カスタムアクション の追加]をクリックしてインストール上> customActions->は、インストール後の要素を読みたい場合は右 インストーラプロジェクトをクリックすると、あなたの問題は

を解決しますihope [表示] - をクリックしてくださいあなたのプロジェクトから出力し、 をクリックしてください。

は今

/DIR="[TARGETDIR]\" 

を書くカスタムアクションデータのプライマリ出力、F4を押し上とでクリックして、次のように、その後、あなたのコードを記述します。

[RunInstaller(true)] 
public class ProjectInstaller : Installer 
{ 
    public ProjectInstaller() 
    { 
    this.InitializeComponent(); 
    } 
    private void InitializeComponent() 
    { 
    this.AfterInstall += new InstallEventHandler(ProjectInstaller_AfterInstall); 
    } 
    void ProjectInstaller_AfterInstall(object sender, InstallEventArgs e) 
    { 
    string path = this.Context.Parameters["DIR"] + "YourFileName.config"; 
    // make sure you replace your filename with the filename you actually 
    // want to read 
    // Then You can read your config using XML to Linq Or you can use 
    // WebConfigurationManager whilst omitting the .config from the path 
    } 
関連する問題