.NET: برنامج Resgen Tutorial
سؤال
أولا لدي RFM و RFM وقد حاولت اتباع بعض المواقع ولكن لا يمكنني فهم مفهوم مدير الموارد.
هل يمكن لأي شخص أن يشرح لي كيفية إنشاء مدير موارد مشابه لمدير VS IDE.
على سبيل المثال ، إذا قمت بتجميع 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
الدقة 2
إذا قمت بتجميع مع 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).aspx يشرح كيفية كتابة ملف Resx. يبدو وكأنه عملية قابلة للتكرار. لست متأكدًا من سبب عدم تضمين فائدة مع Visual Studio لإنشائها.
حاولت استخدام مثال مؤلف الموارد. resgen puked على استخدام MS المقدمة من فئة مؤلف الموارد.
المحلول
نسخة مبسطة من ملف Visual Studios 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, 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>
لكل بايت أو سلسلة تشمل البيانات التالية. حيث الاسم هو الاسم الذي تريد الوصول إليه وقيمة هو eitehr مسار نسبي أو صلب:
<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")