Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从数据库填充Resource.resx文件_C#_Asp.net - Fatal编程技术网

C# 从数据库填充Resource.resx文件

C# 从数据库填充Resource.resx文件,c#,asp.net,C#,Asp.net,我试图在启动时从数据库填充资源文件。每次加载页面时,都应该检查活动语言。我目前一直在解决如何插入资源文件的问题。我尝试了显而易见的方法,但没有成功 ResourceFile = TempTransMessage; 知道怎么做吗?您可以使用Microsoft的文本模板转换工具包(通常称为“T4”)从数据库中存储的数据生成resx文件。Scott Hanselman已经发表了一篇关于这个主题的文章,这将给你一个很好的了解这是如何工作的 .tt文件的一个示例就是这样做的: <#@ templ

我试图在启动时从数据库填充资源文件。每次加载页面时,都应该检查活动语言。我目前一直在解决如何插入资源文件的问题。我尝试了显而易见的方法,但没有成功

 ResourceFile = TempTransMessage;

知道怎么做吗?

您可以使用Microsoft的文本模板转换工具包(通常称为“T4”)从数据库中存储的数据生成resx文件。Scott Hanselman已经发表了一篇关于这个主题的文章,这将给你一个很好的了解这是如何工作的

.tt文件的一个示例就是这样做的:

<#@ template debug="false" hostspecific="false" language="C#" #>
<#@ assembly name="System.Core" #>
<#@ assembly name="System.Data" #>
<#@ assembly name="System.Configuration" #>
<#@ assembly name="System.Web" #>
<#@ import namespace="System.Text" #>
<#@ import namespace="System.Collections.Generic" #>
<#@ import namespace="System.Data" #>
<#@ import namespace="System.Data.SqlClient" #>
<#@ import namespace="System.Web.Configuration" #>
<#@ import namespace="System.Web" #>
<#@ output extension=".resx" #>
<#
    SqlConnection _Connection;
    SqlCommand _Command;

    _Connection = new SqlConnection();

    /// Open the connection to the database
    _Connection.ConnectionString = "Initial Catalog=YourCatalog;Integrated Security=true;Data Source=YourDatasource";

    // Open the connection
    _Connection.Open();

    _Command = _Connection.CreateCommand();
    _Command.CommandType = CommandType.Text;
    _Command.CommandText = "select Id,Value from MyTable";

    SqlDataReader reader = _Command.ExecuteReader();

#>
<?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=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
  </resheader>
  <resheader name="writer">
    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
  </resheader>
  <#        
while(reader.Read())
{#>
  <data name="<#= reader["Id"]#>" xml:space="preserve">
    <value><#= HttpUtility.HtmlEncode(reader["Value"].ToString()) #></value>
  </data>
<#
}
#>
</root>
<#
    reader.Close();
    reader.Dispose();

    /// Close the SqlDataReader if exist and close the connection to the database
   _Connection.Close();
   _Connection.Dispose();
#>

text/microsoft resx
2
System.Resources.ResXResourceReader,System.Windows.Forms,版本=4.0.0.0,区域性=neutral,PublicKeyToken=b77a5c561934e089
System.Resources.ResXResourceWriter,System.Windows.Forms,版本=4.0.0.0,区域性=neutral,PublicKeyToken=b77a5c561934e089

除非您需要重新分发这些资源文件(在这种情况下,Diego的答案是一个非常好的选择),否则您可能还需要查看如何直接从数据库检索资源。使用提供程序,您可以让自定义提供程序直接签出数据库


事实上,Rick Strahl已经这样做了,如果您需要的话

我的ListObject中有数据库中的所有文件,但我只想执行Resource.add,还有其他方法吗?看看:ResXResourceWriter类ASP.NET命名空间中没有ResXResourceWriter:(将System.Windows.Forms.dll添加到引用列表中。将“using System.Resources”添加到aspx.cs文件的顶部。然后,您将能够创建ResXResourceWriter类的实例。