4

長い「ハードコードされた」文字列を使用する C# アプリケーションを作成しています。

保守性の理由から、この文字列を外部テキスト ファイルに入れてロードすることにしました。これは良い考えですか?この場合、余分な I/O は大きくないようです。

このファイルを .resx リソースとして埋め込むオプションもあることに気付きました。これはより良い考えですか?ファイルをローカライズする必要はありません。

4

6 に答える 6

15

ユーザー/管理者が文字列を変更できるようにする場合は、他の回答に同意します。設定に入れることをお勧めします。

展開後に編集可能にしたくない場合や、自分と開発者だけが変更できるようにする場合は、埋め込みリソースに配置します (これは .resx ファイルとは異なります)。実行時に次のように読み取ります。

Assembly assembly = Assembly.GetExecutingAssembly();
Stream stream = assembly.GetManifestResourceStream(“MyAssemblyNamespace.MyTextFile.txt”);
StreamReader reader = new StreamReader(stream);
string theText = streamReader.ReadToEnd();

更新:これは保守が容易なソリューションです。.txt ファイルは、Visual Studio のソリューション エクスプローラーの単なる別のファイルになり、他のファイルと同じように編集したり、他のファイルと同じようにソース管理下に置いたりすることができます。ビルドを変更して埋め込みリソースに変換するにはプロパティウィンドウで「埋め込みリソース」へのアクション。

最終的に、ファイルが DLL に埋め込まれ、DLL と一緒に移動する必要があるファイルのフォルダーではなく、配布する DLL が 1 つだけになります。

更新 2:「プロダクション デバッグ」に関しては、これは非常に静的なソリ​​ューションであり、ファイルはコンパイル時に DLL に焼き付けられるため、実行時にテキスト ファイルの内容を変更することはできません。ファイルの内容を読み取るために、リフレクターなどのツールを使用して、DLL の埋め込みリソースを表示できます。DLL に埋め込まれたすべての .txt ファイルを個々のファイルにダンプして表示する単純なコマンド ライン ツールを作成することもできます。

メモリ使用量については、「必要なときにだけファイルからメモリにロードする」よりも効率的なソリューションはありません。特定の状況で DLL をメモリにロードするときに、メモリを少し追加するだけで保守性と配置が改善されるかどうかを判断する必要があります。とはいえ、これらのファイルの大きさについては言及していません。それらが本当に巨大な場合 (メガバイト以上)、私はおそらくこのソリューションを使用せず、ハード ドライブ上のルーズ ファイルを使用します。それらが一般的に非常に小さい場合 (数百キロバイト)、RAM が非常に不足しているある種の組み込みデバイスの状況でない限り、余分なメモリについて心配することはありません。

于 2009-05-11T15:54:25.253 に答える
4

web/app.config ファイルで appSetting にしないのはなぜですか?

<appSettings>
   <add key="MyLongString" value="This is a really long string value that I don't want hardcoded" />
</appSettings>

次に、コードで:

using System.Configuration;    //To ease your typing pains

var myReallyLongString = ConfigurationManager.AppSettings["MyLongString"];
于 2009-05-11T15:50:12.890 に答える
1

アプリケーション設定を使用することをお勧めします。

アプリケーションとユーザーの設定の使用方法については、この MSDN リンクをたどることができます。

于 2009-05-11T15:48:53.733 に答える
1

これをアプリケーション構成ファイルに入れます。

于 2009-05-11T15:49:39.787 に答える
1

プロジェクトに設定ファイルを追加するとさらに良いでしょう。その後、Visual Studio を使用して構成設定を簡単に追加できます。このリンクを参照してください。

次に、次を使用して文字列にアクセスできます。

Settings.Default.MyString;

さらに、設定は厳密に型指定されているため、取得時に変換を行う必要はありません。

于 2009-05-11T15:49:41.300 に答える