首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >移植时的Mono数据问题(在‘</ resources.resx >’上的resx xml文件中出现奇怪的错误)

移植时的Mono数据问题(在‘</ resources.resx >’上的resx xml文件中出现奇怪的错误)
EN

Stack Overflow用户
提问于 2011-01-12 12:25:47
回答 4查看 5.1K关注 0票数 17

所以我有一个C#应用程序。它有一些链接到其中的资源,并在编译时被嵌入。应用程序可以编译并在windows上完美运行。当测试mono的兼容性时,它告诉我们一切都是正确的。如果我尝试编译xml文件,会给出一个错误

代码语言:javascript
复制
/home/rupert/Desktop/CloudObserverLite(4)/CloudObserverLite/Properties/Resources.resx: Error: Error: Invalid ResX input.
Position: Line 123, Column 5.
Inner exception: value
 (CloudObserverLite)

如果我们看一下resx xml

代码语言:javascript
复制
  ...<resheader name="writer">

    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>

  </resheader>

  <assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />

  <data name="framework_4_5_0_17689_swz" type="System.Resources.ResXFileRef, System.Windows.Forms">

    <value>../assets/framework_4.5.0.17689.swz;System.Byte[], mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>

  </data>

  <data name="index_html" type="System.Resources.ResXFileRef, System.Windows.Forms">

    <value>../assets/index.html;System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;windows-1251</value>

  </data>...

第123行将是第一个</data>标记。

这是所有resx文件,如果它能提供更多信息

代码语言:javascript
复制
 <?xml version="1.0" encoding="utf-8"?>

<root>

  <!-- 

    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>

  <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, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>

  </resheader>

  <resheader name="writer">

    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>

  </resheader>

  <assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />

  <data name="framework_4_5_0_17689_swz" type="System.Resources.ResXFileRef, System.Windows.Forms">

    <value>../assets/framework_4.5.0.17689.swz;System.Byte[], mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>

  </data>

  <data name="index_html" type="System.Resources.ResXFileRef, System.Windows.Forms">

    <value>../assets/index.html;System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;windows-1251</value>

  </data>

  <data name="osmf_1_0_0_16316_swz" type="System.Resources.ResXFileRef, System.Windows.Forms">

    <value>..\assets\osmf_1.0.0.16316.swz;System.Byte[], mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>

  </data>

  <data name="playerProductInstall_swf" type="System.Resources.ResXFileRef, System.Windows.Forms">

    <value>..\assets\playerproductinstall.swf;System.Byte[], mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>

  </data>

  <data name="player_html" type="System.Resources.ResXFileRef, System.Windows.Forms">

    <value>..\assets\player.html;System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;windows-1251</value>

  </data>

  <data name="rpc_4_5_0_17689_swz" type="System.Resources.ResXFileRef, System.Windows.Forms">

    <value>..\assets\rpc_4.5.0.17689.swz;System.Byte[], mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>

  </data>

  <data name="sparkskins_4_5_0_17689_swz" type="System.Resources.ResXFileRef, System.Windows.Forms">

    <value>..\assets\sparkskins_4.5.0.17689.swz;System.Byte[], mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>

  </data>

  <data name="spark_4_5_0_17689_swz" type="System.Resources.ResXFileRef, System.Windows.Forms">

    <value>..\assets\spark_4.5.0.17689.swz;System.Byte[], mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>

  </data>

  <data name="swfobject_js" type="System.Resources.ResXFileRef, System.Windows.Forms">

    <value>..\assets\swfobject.js;System.Byte[], mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>

  </data>

  <data name="textLayout_2_0_0_139_swz" type="System.Resources.ResXFileRef, System.Windows.Forms">

    <value>..\assets\textlayout_2.0.0.139.swz;System.Byte[], mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>

  </data>

  <data name="AC_OETags_js" type="System.Resources.ResXFileRef, System.Windows.Forms">

    <value>..\assets\ac_oetags.js;System.Byte[], mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>

  </data>

  <data name="history_historyFrame_html" type="System.Resources.ResXFileRef, System.Windows.Forms">

    <value>..\assets\history_historyframe.html;System.Byte[], mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>

  </data>

  <data name="history_history_css" type="System.Resources.ResXFileRef, System.Windows.Forms">

    <value>..\assets\history_history.css;System.Byte[], mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>

  </data>

  <data name="history_history_js" type="System.Resources.ResXFileRef, System.Windows.Forms">

    <value>..\assets\history_history.js;System.Byte[], mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>

  </data>

  <data name="player_swf" type="System.Resources.ResXFileRef, System.Windows.Forms">

    <value>..\assets\player.swf;System.Byte[], mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>

  </data> 

</root>

如果我们查看项目结构,我们将看到:

对不起,我是第一次使用单语帮助。

EN

回答 4

Stack Overflow用户

发布于 2014-06-01 10:30:11

转到Edit -> Preferences -> Projects -> Build并选中"Compile projects using MSBuild / XBuild“选项。

票数 1
EN

Stack Overflow用户

发布于 2015-12-01 18:02:50

通过将所有路径中的all \替换为/,我的问题得到了解决。

票数 1
EN

Stack Overflow用户

发布于 2014-10-04 09:52:31

也可以使用dmcs手动嵌入资源:

代码语言:javascript
复制
dmcs -r:<libraries go here> -resource:<resource1> -resource:<resource2> -resource:<etc> *.cs -OUT:Program.exe

这相当麻烦,我通常会在文本编辑器中写出很长的编译字符串(称之为compilestring.txt say..),然后他们会这样做:

代码语言:javascript
复制
comp=$(echo | cat compilestring.txt)

然后输入$comp来编译我的项目。

希望这能有所帮助!(在linux和mono中遇到类似的.resx文件问题后,我不得不求助于此)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4665327

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档