私はWinForms、リソースファイルでいくつかの問題を引き起こしているClickOnce配置を使用するC#ソリューションを持っています。つまり、クラスライブラリプロジェクトでコンテンツとしてマークされたファイルは、ClickOnceを使用して展開した後、出力bin/フォルダーにコピーされません。
ソリューションの基本構造は次のとおりです(以下にリストするプロジェクトよりも多くのプロジェクトが含まれています)
Solution
|--Gui 1 Project
| |--References
| | |--ClassLibrary
|--Gui 2 Project
| |--References
| | |--ClassLibrary
|--Main Gui Project (StartUp Project)
| |--References
| | |--Gui 1 Project
| | |--Gui 2 Project
| | |--ClassLibrary
| |--Datafile.wav (Build Action: Content, Copy-if-newer)
| |--Mods.xml (Build Action: Content, Copy-if-newer)
| |--VariousSourceFiles.cs
|--ClassLibrary
| |--Resources
| | |--Elements.xml (Build Action: Content, Copy-if-newer)
| | |--AminoAcids.xml (Build Action: Content, Copy-if-newer)
| |--VariousSourceFiles.cs
メインGuiプロジェクトは、このプログラムのスタートアッププロジェクトであり、その中の他のGUIアプリケーションを起動する単純なMDIコンテナーです。開発マシンでデバッグ/リリースモードのいずれかでビルドすると、すべてが期待どおりに機能します。GUIプログラムがコンパイルされ、Datafile.wavファイルとMods.xmlファイルがbin /フォルダーにコピーされ、Elements.xmlファイルとAminoAcids.xmlファイルがbin /Resources/フォルダーにコピーされます。プログラムは問題なく期待どおりに機能します。
ここから問題が始まります。VS2010のClick-Once公開機能を使用して、サーバー上の同僚にプログラムを内部的にリリースします。彼らはプログラムをうまくインストールし、それを起動することさえできます。ただし、リソースファイル(Elements.xmlまたはAminoAcids.xml)の1つを使用するボタンをクリックするとすぐに、ファイルが見つからないという例外がスローされます。これは、他の2つのコンテンツファイル(Datafile.wavとMods.xml)では発生しません。つまり、これらは最終ディレクトリに正しくコピーされます。
したがって、[メインGuiプロジェクト]->[プロパティ]->[公開]->[アプリケーションファイル]に移動すると、Datafile.wavとMods.xmlがこのリストに含まれていることがわかります。ただし、他の2つのコンテンツファイル(Elements.xmlとAminoAcids.xml)はそうではありません。プログラムをサーバーに公開すると、リソースをコピーすることがわからないため、これが問題だと思います。これらのファイルを含める必要があることをClickOnceに通知するにはどうすればよいですか?ClassLibrary.dllはこのリストに表示されますが、.xmlファイルは表示されません。
次に、[クラスライブラリ]->[プロパティ]->[公開]に移動しようとしましたが、クラスライブラリであるため、[公開]のタブがありません。そのため、これら2つのリソースファイルをクライアントコンピューターの最終的なbin/Resourcesファイルにコピーするように指定することはできません。これを克服する方法を知っている人はいますか?
プログラムのユーザーがファイルのコンテンツを変更/更新/拡張する可能性があるため、リソースファイル(.xml)をビルドアクション:埋め込みリソースではなくコンテンツとして保持したいと思います。