21

F#2.0プロジェクトで.resxファイルを使用できますか?

もしそうなら、どうすればこれらのリソースを追加して使用することができますか。

前もって感謝します。

4

4 に答える 4

17

F#プロジェクトにファイルを作成できます。ファイルは自動的に取得され、機能Add existing itemするはずです。ここでのVSツールは、他の言語ほど優れていませんが、MSBuildはすべての面倒な作業を行うため、XMLの適切なスニペットを.fsprojファイルに取り込むだけです。.resxBuildActionEmbeddedResource

于 2010-04-22T14:41:54.737 に答える
10

F#2.0プロジェクトで.resxを使用しています。お気軽にご覧ください。お役に立てば幸いです。大きな揺れはありませんが、ここではそれが価値のあるものです。

http://github.com/OnorioCatenacci/ExtendedSearch

編集:それが価値があるものについては、ここにfsprojファイルの関連部分があります

  <ItemGroup>
    <Compile Include="assemblyinfo.ExtendedSearch.exe.fs" />
    <Compile Include="ExtendedSearch.fs" />
    <EmbeddedResource Include="ExtendedSearch.resx" />
  </ItemGroup>

そしてここにExtendedSearch.resxがあります:

<?xml version="1.0" encoding="utf-8"?>
<root>
  <resheader name="resmimetype">
    <value>text/microsoft-resx</value>
  </resheader>
  <resheader name="version">
    <value>2.0</value>
  </resheader>
  <resheader name="reader">
    <value>System.Resources.ResXResourceReader, System.Windows.Forms, ...</value>
  </resheader>
  <resheader name="writer">
    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, ...</value>
  </resheader>
  <!-- 
    Microsoft ResX Schema 

    Version 2.0

    The primary goals of this format is to allow a simple XML format 
    that is mostly human readable. The generation and parsing of the 
    various data types are done through the TypeConverter classes 
    associated with the data types.

    Example:

    ... ado.net/XML headers & schema ...
    <resheader name="resmimetype">text/microsoft-resx</resheader>
    <resheader name="version">2.0</resheader>
    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
        <value>[base64 mime encoded serialized .NET Framework object]</value>
    </data>
    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
        <comment>This is a comment</comment>
    </data>

    There are any number of "resheader" rows that contain simple 
    name/value pairs.

    Each data row contains a name, and value. The row also contains a 
    type or mimetype. Type corresponds to a .NET class that support 
    text/value conversion through the TypeConverter architecture. 
    Classes that don't support this are serialized and stored with the 
    mimetype set.

    The mimetype is used for serialized objects, and tells the 
    ResXResourceReader how to depersist the object. This is currently not 
    extensible. For a given mimetype the value must be set accordingly:

    Note - application/x-microsoft.net.object.binary.base64 is the format 
    that the ResXResourceWriter will generate, however the reader can 
    read any of the formats listed below.

    mimetype: application/x-microsoft.net.object.binary.base64
    value   : The object must be serialized with 
            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
            : and then encoded with base64 encoding.

    mimetype: application/x-microsoft.net.object.soap.base64
    value   : The object must be serialized with 
            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
            : and then encoded with base64 encoding.

    mimetype: application/x-microsoft.net.object.bytearray.base64
    value   : The object must be serialized into a byte array 
            : using a System.ComponentModel.TypeConverter
            : and then encoded with base64 encoding.
    -->
  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
    <xsd:element name="root" msdata:IsDataSet="true">
      <xsd:complexType>
        <xsd:choice maxOccurs="unbounded">
          <xsd:element name="metadata">
            <xsd:complexType>
              <xsd:sequence>
                <xsd:element name="value" type="xsd:string" minOccurs="0" />
              </xsd:sequence>
              <xsd:attribute name="name" use="required" type="xsd:string" />
              <xsd:attribute name="type" type="xsd:string" />
              <xsd:attribute name="mimetype" type="xsd:string" />
              <xsd:attribute ref="xml:space" />
            </xsd:complexType>
          </xsd:element>
          <xsd:element name="assembly">
            <xsd:complexType>
              <xsd:attribute name="alias" type="xsd:string" />
              <xsd:attribute name="name" type="xsd:string" />
            </xsd:complexType>
          </xsd:element>
          <xsd:element name="data">
            <xsd:complexType>
              <xsd:sequence>
                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
              </xsd:sequence>
              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
              <xsd:attribute ref="xml:space" />
            </xsd:complexType>
          </xsd:element>
          <xsd:element name="resheader">
            <xsd:complexType>
              <xsd:sequence>
                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
              </xsd:sequence>
              <xsd:attribute name="name" type="xsd:string" use="required" />
            </xsd:complexType>
          </xsd:element>
        </xsd:choice>
      </xsd:complexType>
    </xsd:element>
  </xsd:schema>
  <data name = "AppDisplayName">
    <value>Extended Search</value>
  </data>
  <data name="FilePathSpecLabel">
    <value>Base File Path:</value>
  </data>
  <data name="FilePathSpecDefault">
    <value>C:\</value>
  </data>
  <data name ="SelectDirButtonLabel">
    <value>. . .</value>  
  </data>  
  <data name="FileNameSpecLabel">
    <value>File Name Spec:</value>
  </data>
  <data name="FileNameSpecDefault">
    <value>*.dll</value>
  </data>
  <data name="RecurseIntoSubdirsLabel">
    <value>Recurse Into Subdirectories</value>
  </data>
  <data name ="MajorVerDefault">
    <value>1</value>
  </data>
  <data name="MinorVerDefault">
    <value>0</value>
  </data>
  <data name="RevisionVerDefault">
    <value>0</value>
  </data>
  <data name="BuildVerDefault">
    <value>0</value>
  </data>
  <data name="VersionLabel">
    <value>File &amp;Version:</value>
  </data>
  <data name="SearchButtonCaption">
    <value>&amp;Search</value>
  </data>
  <data name="CancelButtonCaption">
    <value>&amp;Cancel</value>
  </data>
</root>

これにより、GitHubでこれを見つけることができない人々に関する将来の問題がなくなることを願っています。

于 2010-04-22T12:14:57.090 に答える
6

これが別の方法です。元の質問には遅すぎることはわかっていますが、他の人の役に立つことを願っています。

  1. name = value形式で、1行に1つのキーと値のペアを持つクリーンテキストファイルを作成します。「strings.txt」という名前のファイルに、

    name1=hello
    name2=world
    
  2. 手順1のテキストファイルに作用するResGen.exeを使用して、リソースファイルを作成します。ResGenについては、http://msdn.microsoft.com/en-us/library/ccec7sz1%28v=vs.80%29.aspxで確認できます。ResGenは、「strings.resources」という名前のCLRバイナリファイルを作成します。このリソースファイルをコンパイラが見つけられる場所に置きます。

  3. コンパイラオプションとして「--resource:strings.resources」を追加します。これは、ビルドプロパティの[その他のフラグ]テキストボックスから行いました。詳細については、http://msdn.microsoft.com/en-us/library/dd233171.aspxを参照してください。

  4. F#プロジェクトに次のように記述します

    open System.Resources
    let res = ResourceManager("strings", System.Reflection.Assembly.GetExecutingAssembly())
    res.GetString("name1") + res.GetString("name2") |> printfn "%s"
    
于 2012-09-19T21:18:50.860 に答える
4

上記の@"OnorioCatenacci" GitHub Linkeに従って、既存のF#プロジェクトにリソースを追加するには...

  1. テキストファイルを作成し、以下のコンテンツを入力して、保存して閉じます。
  2. このテキストファイル拡張子の名前を.resx(XMLリソースファイル)に変更します
  3. に更新Build ActionしますEmbeddedResource
  4. これで、ファイルがVSリソースエディターで正しく開かれ、その内容を編集できるようになります。

.resxファイルテンプレート:

    <root>
      <resheader name="resmimetype"><value>text/microsoft-resx</value></resheader>
      <resheader name="version"><value>2.0</value></resheader>
      <resheader name="reader"><value>System.Resources.ResXResourceReader, System.Windows.Forms, ...</value></resheader>
      <resheader name="writer"><value>System.Resources.ResXResourceWriter, System.Windows.Forms, ...</value></resheader>
      <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
        <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
        <xsd:element name="root" msdata:IsDataSet="true">
          <xsd:complexType>
            <xsd:choice maxOccurs="unbounded">
              <xsd:element name="metadata">
                <xsd:complexType>
                  <xsd:sequence>
                    <xsd:element name="value" type="xsd:string" minOccurs="0" />
                  </xsd:sequence>
                  <xsd:attribute name="name" use="required" type="xsd:string" />
                  <xsd:attribute name="type" type="xsd:string" />
                  <xsd:attribute name="mimetype" type="xsd:string" />
                  <xsd:attribute ref="xml:space" />
                </xsd:complexType>
              </xsd:element>
              <xsd:element name="assembly">
                <xsd:complexType>
                  <xsd:attribute name="alias" type="xsd:string" />
                  <xsd:attribute name="name" type="xsd:string" />
                </xsd:complexType>
              </xsd:element>
              <xsd:element name="data">
                <xsd:complexType>
                  <xsd:sequence>
                    <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
                    <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
                  </xsd:sequence>
                  <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
                  <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
                  <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
                  <xsd:attribute ref="xml:space" />
                </xsd:complexType>
              </xsd:element>
              <xsd:element name="resheader">
                <xsd:complexType>
                  <xsd:sequence>
                    <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
                  </xsd:sequence>
                  <xsd:attribute name="name" type="xsd:string" use="required" />
                </xsd:complexType>
              </xsd:element>
            </xsd:choice>
          </xsd:complexType>
        </xsd:element>
      </xsd:schema>
    </root>
于 2015-10-21T06:15:04.953 に答える