F# プロジェクトのツールはあまり良くないので、以前の回答で提案したことは機能しません。
C# プロジェクトには、.resx ファイルに対して (ビルドの直前に) 実行され、C# ラッパー クラスを生成する "ResXFileCodeGenerator" という名前のカスタム ツールがあります。これは明らかに F# プロジェクトでは利用できません。ただし、回避策が必要です。
私の頭に浮かぶ最も簡単な方法は、つまり、C# カスタム ツールから生成された厳密に型指定されたラッパーを使用する場合、ソリューションに新しい C# クラス ライブラリを追加することです。これには resx ファイルが含まれ、ラッパー クラスが生成されます。 . から .resx ファイルを追加できますProject -> Add New Item... -> Resource File
。次に、すべての F# プロジェクトからこのライブラリを参照し、生成されたラッパー クラスを使用できます。
open ClassLibrary1; // this is the C# library
...
let x = Resources.String1;
2 番目の方法は、F# プロジェクトに .resx ファイルを直接追加することです。ここで面白いのは、Visual Studio では Resource タイプの「新しい項目を追加」できないことです。これを回避するには、別の一時的なプロジェクト (タイプ C# クラス ライブラリなど) にリソース ファイルを作成し、Project -> Add Existing Item
コマンドを使用して、生成された .resx ファイルを F# プロジェクトに追加します。次に、 ResourceManagerクラスを使用して resx ファイルのリソースを使用できます(もちろん、前のケースのように、すべてのリソースに対して生成されたプロパティは必要ありません)。
open Library1
open System.Resources
[<EntryPoint>]
let main argv =
// We are in the console application, which references Library1
// Library1 contains the .resx file.
let resourceManager = ResourceManager("Resources", typeof<Library1.Class1>.Assembly);
let x = resourceManager.GetString("String1");
0
大文字では、Resources.resx という名前のファイルとして、リソース ファイルを (サブフローダーではなく) プロジェクトに直接追加したことに注意してください。
さらに、そのような呼び出しをプロパティ内にカプセル化するカスタム ラッパーを作成できます。