我正在尝试使用CSharpCodeProvider编译下面的代码。该文件已成功编译,但当我单击生成的EXE文件时,我收到一个错误(Windows正在搜索此问题的解决方案),但什么也没有发生
当我使用CSharpCodeProvider编译下面的代码时,我使用以下代码行将MySql.Data.dll添加为嵌入式资源文件:
if(provider.Supports(GeneratorSupport.Resources))
Add(“MySql.Data.dll”);
文件已成功嵌入(因为我注意到文件大小增加)
在下面的代码中,我尝试提取嵌入的DLL文件并将其保存到System32,但由于某些原因,下面的代码无法工作
命名空间控制台应用程序1
{
班级计划
{
公共静态void ExtractSaveResource(字符串文件名、字符串位置)
{
//Assembly=Assembly.getExecutionGassembly();
程序集a=.Assembly.getExecutionGassembly();
//Stream Stream=assembly.GetManifestResourceStream(“Installer.Properties.mydll.dll”);//或其他
//字符串my_namespace=a.GetName().Name.ToString();
Stream resFilestream=a.GetManifestResourceStream(文件名);
if(resFilestream!=null)
{
BinaryReader br=新的BinaryReader(resFilestream);
FileStream fs=newfilestream(位置,FileMode.Create);//比如
BinaryWriter bw=新的BinaryWriter(fs);
byte[]ba=新字节[resFilestream.Length];
resFilestream.Read(ba,0,ba.Length);
bw.Write(ba);
br.Close();
bw.Close();
resFilestream.Close();
}
//这个。关闭();
}
静态void Main(字符串[]参数)
{
尝试
{
字符串systemDir=Environment.SystemDirectory;
ExtractSaveResource(“MySql.Data.dll”,systemDir);
}
捕获(例外情况除外)
{
控制台写入线(例如消息);
Console.ReadKey();
}
}
}
}
如何提取作为资源嵌入的DLL文件并将其保存到System32
我建议做得容易些。我假设资源存在并且文件可写(如果我们谈论的是系统目录,这可能是一个问题)
public void WriteResourceToFile(字符串resourceName,字符串文件名)
{
使用(var resource=Assembly.getExecutionGassembly().GetManifestResourceStream(resourceName))
{
使用(var file=newfilestream(文件名,FileMode.Create,FileAccess.Write))
{
resource.CopyTo(文件);
}
}
}