AssemblyBuilder.AddResourceFile メソッド (String, String)
既存のリソース ファイルをこのアセンブリに追加します。
Overloads Public Sub AddResourceFile( _
ByVal name As String, _ ByVal fileName As String _)
[C#]
public void AddResourceFile(stringname,stringfileName);
[C++]
public: void AddResourceFile(String* name,String* fileName);
[JScript]
public function AddResourceFile(
name : String,fileName : String);
パラメータ
- name
リソースの論理名。 - fileName
論理名を割り当てる対象の物理ファイル名 (.resources ファイル)。パスを含めないでください。
例外
例外の種類 | 条件 |
---|---|
ArgumentException | name が既に定義されています。
または アセンブリ内に fileName という名前のファイルがもう 1 つあります。 または name の長さが 0 です。 または fileName の長さがゼロか、fileName にパスが含まれています。 |
ArgumentNullException | name または fileName が null 参照 (Visual Basic では Nothing) です。 |
FileNotFoundException | fileName に指定したファイルが見つからない場合。 |
SecurityException | 呼び出し元に、必要なアクセス許可がありません。 |
解説
fileName は、他の永続可能モジュール、スタンドアロン マネージ リソース、またはスタンドアロン マニフェスト ファイルの名前と同じにしないでください。
ファイルのマネージ リソースは、パブリックであると見なされます。
使用例
[Visual Basic, C#, C++] 次のコード例は、 AddResourceFile を使用して、動的に作成されたアセンブリにリソース ファイルを結び付ける方法を示しています。
Imports System
Imports System.IO
Imports System.Threading
Imports System.Reflection
Imports System.Reflection.Emit
_
Class AsmBuilderGetFileDemo
Private Shared myResourceFileName As String = "MyResource.txt"
Private Shared Function CreateResourceFile() As FileInfo
Dim f As New FileInfo(myResourceFileName)
Dim sw As StreamWriter = f.CreateText()
sw.WriteLine("Hello, world!")
sw.Close()
Return f
End Function 'CreateResourceFile
Private Shared Function BuildDynAssembly() As AssemblyBuilder
Dim myAsmFileName As String = "MyAsm.dll"
Dim myDomain As AppDomain = Thread.GetDomain()
Dim myAsmName As New AssemblyName()
myAsmName.Name = "MyDynamicAssembly"
Dim myAsmBuilder As AssemblyBuilder = myDomain.DefineDynamicAssembly(myAsmName, _
AssemblyBuilderAccess.RunAndSave)
myAsmBuilder.AddResourceFile("MyResource", myResourceFileName)
' To confirm that the resource file has been added to the manifest,
' we will save the assembly as MyAsm.dll. You can view the manifest
' and confirm the presence of the resource file by running
' "ildasm MyAsm.dll" from the prompt in the directory where you executed
' the compiled code.
myAsmBuilder.Save(myAsmFileName)
Return myAsmBuilder
End Function 'BuildDynAssembly
Public Shared Sub Main()
Dim myResourceFS As FileStream = Nothing
CreateResourceFile()
Console.WriteLine("The contents of MyResource.txt, via GetFile:")
Dim myAsm As AssemblyBuilder = BuildDynAssembly()
Try
myResourceFS = myAsm.GetFile(myResourceFileName)
Catch nsException As NotSupportedException
Console.WriteLine("---")
Console.WriteLine("System.Reflection.Emit.AssemblyBuilder.GetFile is not supported " + _
"in this SDK build.")
Console.WriteLine("The file data will now be retrieved directly, via a new FileStream.")
Console.WriteLine("---")
myResourceFS = New FileStream(myResourceFileName, FileMode.Open)
End Try
Dim sr As New StreamReader(myResourceFS, System.Text.Encoding.ASCII)
Console.WriteLine(sr.ReadToEnd())
sr.Close()
End Sub 'Main
End Class 'AsmBuilderGetFileDemo
[C#]
using System;
using System.IO;
using System.Threading;
using System.Reflection;
using System.Reflection.Emit;
class AsmBuilderGetFileDemo
{
private static string myResourceFileName = "MyResource.txt";
private static FileInfo CreateResourceFile()
{
FileInfo f = new FileInfo(myResourceFileName);
StreamWriter sw = f.CreateText();
sw.WriteLine("Hello, world!");
sw.Close();
return f;
}
private static AssemblyBuilder BuildDynAssembly()
{
string myAsmFileName = "MyAsm.dll";
AppDomain myDomain = Thread.GetDomain();
AssemblyName myAsmName = new AssemblyName();
myAsmName.Name = "MyDynamicAssembly";
AssemblyBuilder myAsmBuilder = myDomain.DefineDynamicAssembly(
myAsmName,
AssemblyBuilderAccess.RunAndSave);
myAsmBuilder.AddResourceFile("MyResource", myResourceFileName);
// To confirm that the resource file has been added to the manifest,
// we will save the assembly as MyAsm.dll. You can view the manifest
// and confirm the presence of the resource file by running
// "ildasm MyAsm.dll" from the prompt in the directory where you executed
// the compiled code.
myAsmBuilder.Save(myAsmFileName);
return myAsmBuilder;
}
public static void Main()
{
FileStream myResourceFS = null;
CreateResourceFile();
Console.WriteLine("The contents of MyResource.txt, via GetFile:");
AssemblyBuilder myAsm = BuildDynAssembly();
try
{
myResourceFS = myAsm.GetFile(myResourceFileName);
}
catch (NotSupportedException)
{
Console.WriteLine("---");
Console.WriteLine("System.Reflection.Emit.AssemblyBuilder.GetFile\nis not supported " +
"in this SDK build.");
Console.WriteLine("The file data will now be retrieved directly, via a new FileStream.");
Console.WriteLine("---");
myResourceFS = new FileStream(myResourceFileName,
FileMode.Open);
}
StreamReader sr = new StreamReader(myResourceFS, System.Text.Encoding.ASCII);
Console.WriteLine(sr.ReadToEnd());
sr.Close();
}
}
[C++]
#using <mscorlib.dll>
using namespace System;
using namespace System::IO;
using namespace System::Threading;
using namespace System::Reflection;
using namespace System::Reflection::Emit;
__gc class AsmBuilderGetFileDemo {
public:
static String* myResourceFileName = S"MyResource.txt";
static FileInfo* CreateResourceFile() {
FileInfo* f = new FileInfo(myResourceFileName);
StreamWriter* sw = f->CreateText();
sw->WriteLine(S"Hello, world!");
sw->Close();
return f;
}
static AssemblyBuilder* BuildDynAssembly() {
String* myAsmFileName = S"MyAsm.dll";
AppDomain* myDomain = Thread::GetDomain();
AssemblyName* myAsmName = new AssemblyName();
myAsmName->Name = S"MyDynamicAssembly";
AssemblyBuilder* myAsmBuilder = myDomain->DefineDynamicAssembly(myAsmName,
AssemblyBuilderAccess::RunAndSave);
myAsmBuilder->AddResourceFile(S"MyResource", myResourceFileName);
// To confirm that the resource file has been added to the manifest,
// we will save the assembly as MyAsm.dll. You can view the manifest
// and confirm the presence of the resource file by running
// "ildasm MyAsm.dll" from the prompt in the directory where you executed
// the compiled code.
myAsmBuilder->Save(myAsmFileName);
return myAsmBuilder;
}
};
int main() {
FileStream* myResourceFS = 0;
AsmBuilderGetFileDemo::CreateResourceFile();
Console::WriteLine(S"The contents of MyResource.txt, via GetFile:");
AssemblyBuilder* myAsm = AsmBuilderGetFileDemo::BuildDynAssembly();
try {
myResourceFS = myAsm->GetFile(AsmBuilderGetFileDemo::myResourceFileName);
} catch (NotSupportedException*) {
Console::WriteLine(S"---");
Console::WriteLine(S"System::Reflection::Emit::AssemblyBuilder::GetFile\nis not supported in this SDK build.");
Console::WriteLine(S"The file data will now be retrieved directly, via a new FileStream.");
Console::WriteLine(S"---");
myResourceFS = new FileStream(AsmBuilderGetFileDemo::myResourceFileName,
FileMode::Open);
}
StreamReader* sr = new StreamReader(myResourceFS, System::Text::Encoding::ASCII);
Console::WriteLine(sr->ReadToEnd());
sr->Close();
}
[JScript] JScript のサンプルはありません。Visual Basic、C#、および C++ のサンプルを表示するには、このページの左上隅にある言語のフィルタ ボタン をクリックします。
必要条件
プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ
.NET Framework セキュリティ:
- ReflectionPermission SecurityAction.Demand、ReflectionEmit=true
- ReflectionPermission (Type.InvokeMember などの機構を通じて遅延バインディングで呼び出すときに必要なアクセス許可) ReflectionPermissionFlag.MemberAccess (関連する列挙体)
- FileIOPermission リソース ファイル resourceFileName にアクセスするには、FileIOPermissionAccess.Read アクセス許可が必要です。
参照
AssemblyBuilder クラス | AssemblyBuilder メンバ | System.Reflection.Emit 名前空間 | AssemblyBuilder.AddResourceFile オーバーロードの一覧