1

まず、 RFMRFMがあり、いくつかのサイトをフォローしようとしましたが、リソースマネージャーの概念を理解できません。

VSIDEと同様のリソースマネージャーを生成する方法を誰かに説明してもらえますか。

たとえば、コマンドラインからVBCを使用してコンパイルすると、すべてのリソースファイルを表示できます。

vbc / t:exe myfile.vb / res:res1 / res:res2

Dim a as Assembly = Assembly.GetExecutingAssembly()
For Each i as string in a.GetManifestResourceNames()
    Console.writeline(i)
Next i

res1

res2

VS IDEでコンパイルすると、次のように表示されます。

myprogram.Resources.resource

VS IDEの場合と同じようにリソースマネージャーを使用できるように、コマンドラインから手動でリソースマネージャーを作成するにはどうすればよいですか?

Dim CurrentResourceManager As New ResourceManager(_
"myprogram.Resources", CurrentAssembly)
Dim CurrentResourceSet As ResourceSet = CurrentResourceManager.GetResourceSet( _
CultureInfo.CurrentCulture, True, True)

resgenを使おうとすると、ファイル拡張子について文句を言います。

C:...> resgen image.bmp myfile.Resource.resource source

ResGen:エラーRG0000:「image.bmp」という名前のファイルに既知の拡張子がありません。管理対象リソースファイルは、.ResX、.txt、または.resourcesで終わる必要があります。

マニュアルでは、画像にRESXGENを使用するように記載されていますが、VS2008で使用できるとは思いません。ハマった。

更新:これが見つかりました:http://msdn.microsoft.com/en-us/library/ekyft91f (VS.80).aspxResXファイルの作成方法について説明しています。繰り返し可能なプロセスのようです。なぜ彼らがそれを作成するためのビジュアルスタジオを備えたユーティリティを含まないのか分かりません。

ResourceWriterの例を使用してみました。Resgenは、MS提供のResourceWriterクラスを使用することに成功しました。

4

1 に答える 1

0

VisualStudiosResxで生成されたファイルの簡略化されたバージョン。パブリックトークンとスキーママッピングを削除しました。スキーママッピングは、これらのファイルを作成/変更するときに役立ちます。デモンストレーションと簡単さのために、私はそれを取り除きました。

<?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, Version=2.0.0.0, Culture=neutral</value>
  </resheader>
  <resheader name="writer">
    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral</value>
  </resheader>
  <assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=2.0.0.0, Culture=neutral" />
  <data name="mylibrary" type="System.Resources.ResXFileRef, System.Windows.Forms">
    <value>Resources\mylibrary.dll;System.Byte[], mscorlib, Version=2.0.0.0, Culture=neutral</value>
  </data>
  <data name="mytext" type="System.Resources.ResXFileRef, System.Windows.Forms">
    <value>Resources\mytext.txt;System.String, mscorlib, Version=2.0.0.0, Culture=neutral</value>
  </data>
</root>

タイプごとに、バイトまたは文字列に次のデータを含めます。ここで、nameはアクセスしたい名前であり、valueは相対パスまたはハードパスです。

<data name="mytext" type="System.Resources.ResXFileRef, System.Windows.Forms">
    <value>Resources\mytext.txt;System.String, mscorlib, Version=2.0.0.0, Culture=neutral</value>
<data>

リソースを単一のリソースマネージャーファイルにコンパイルし、プロジェクトに含めます

resgen /compile myrex.resx

vbc /t:exe myprogram.vb /res:myresx.resource
csc /t:exe myprogram.cs /res:myresx.resource

これらのファイルにアクセスするには、プログラムにリソースマネージャーを作成する必要があります。強く型付けされたリソースマネージャーが必要な場合は、プロジェクト内からResource.Designerクラスをたどり、そのファイルを変更する必要があります。単純なリソースマネージャーが必要な場合は、GetStringまたはGetBytesを使用するだけです。

Dim rm As New ResourceManager("rmc", [Assembly].GetExecutingAssembly())
day = rm.GetString("mytext")
o = rm.GetObject("mylibrary.dll")
于 2010-09-09T17:39:32.880 に答える