C#将嵌入式资源从汇编提取到pc中的特定位置?
如何使用按钮单击将文件(文件类型:.jpg、.txt、.dll等)从应用程序资源代码导出到计算机上的特定位置(例如:C:\drive) 我通过单击按钮尝试了此代码: 主要代码: 更多信息: 1) 我将.dll文件上载到我的资源 2) 我将此文件生成操作更改为=“嵌入式资源” 我在下面克林特的帮助下试过了。 我现在的项目图片: 情景一(您的情景)C#将嵌入式资源从汇编提取到pc中的特定位置?,c#,winforms,export,C#,Winforms,Export,如何使用按钮单击将文件(文件类型:.jpg、.txt、.dll等)从应用程序资源代码导出到计算机上的特定位置(例如:C:\drive) 我通过单击按钮尝试了此代码: 主要代码: 更多信息: 1) 我将.dll文件上载到我的资源 2) 我将此文件生成操作更改为=“嵌入式资源” 我在下面克林特的帮助下试过了。 我现在的项目图片: 情景一(您的情景) 您有一个包含嵌入式资源(图像、txt等)的项目 您想从程序集中提取此文件并将其传输到其他位置 情景二 您有一个类库项目(dll),它有一个嵌入
- 您有一个包含嵌入式资源(图像、txt等)的项目
- 您想从程序集中提取此文件并将其传输到其他位置
- 您有一个类库项目(dll),它有一个嵌入式资源,如(图像、txt等)
- 您在主项目中加载此dll,并希望访问dll中的资源(图像)
- packages.config是一个嵌入式资源(将其替换为您正在使用的资源)
- 我的项目的
是ConsoleApp(用您的名称空间替换它)名称空间
Main
static void Main(string[] args)
{
ResourceManager.GetResourceInfo("packages.config");
if (ResourceManager.resourceExists == false)
return;
//Loads packages.config in Bin/Debug
ResourceManager.LoadResource("packages.config");
}
ResourceManager.cs
class ResourceManager
{
public static bool resourceExists { get; set; } = false;
private static Stream resourceStream { get; set; }
public static void GetResourceInfo(string fileNameWithExtension)
{
//Substitut this with your Project Name
//Class Library Name AssistantLib > Resources > AssistantLib.dll
const string pathToResource = "ConsoleApp.Folder1.Folder2";
//The Dll that you want to Load
var assembly = Assembly.GetExecutingAssembly();
//var names = assembly.GetManifestResourceNames();
var stream = assembly.GetManifestResourceStream($"{pathToResource}.{fileNameWithExtension}");
if (stream == null)
return;
resourceExists = true;
resourceStream = stream;
}
public static void LoadResource(string newFileNameWithExtension)
{
if(File.Exists(newFileNameWithExtension))
{
Console.WriteLine("File already exists");
return;
}
using (Stream s = File.Create(newFileNameWithExtension))
{
Console.WriteLine("Loading file");
resourceStream.CopyTo(s);
}
}
}
输出
输出文件夹中的Package.Config
是资源的名称
ApplicationName.Files.name.dll
?如果没有,您在实际代码中是否使用了正确的名称?@AhmedAbdelhameed是。我的应用程序名是“ApplicationName”,我在参考资料中上载的文件是“name”。如果程序集名是ApplicationName
,文件名是name.dll
,并且它位于根目录中名为Files
的子文件夹中,那么代码应该可以正常工作。确保所有这些都是真的。@AhmedAbdelhameed一切都像“主代码”一样。但每次单击按钮时,都会显示错误“stream was null”。在文件夹中创建了一个名为“name.dll”的文件,但该文件的大小为0kb.hey@SwagHero,如果下面的解决方案有帮助,请告诉我注释不用于扩展讨论;此对话已被更改。是的,我确实更改了它,但未生效。我删除了“name.dll”并复制了另一个.dll文件,然后在运行该文件时显示“System.UnauthorizedAccessException:'对路径“C:\name.dll”的访问被拒绝'”。我该怎么解决这个问题?@SwagHero,使用上面的聊天链接
static void Main(string[] args)
{
ResourceManager.GetResourceInfo("packages.config");
if (ResourceManager.resourceExists == false)
return;
//Loads packages.config in Bin/Debug
ResourceManager.LoadResource("packages.config");
}
class ResourceManager
{
public static bool resourceExists { get; set; } = false;
private static Stream resourceStream { get; set; }
public static void GetResourceInfo(string fileNameWithExtension)
{
//Substitut this with your Project Name
//Class Library Name AssistantLib > Resources > AssistantLib.dll
const string pathToResource = "ConsoleApp.Folder1.Folder2";
//The Dll that you want to Load
var assembly = Assembly.GetExecutingAssembly();
//var names = assembly.GetManifestResourceNames();
var stream = assembly.GetManifestResourceStream($"{pathToResource}.{fileNameWithExtension}");
if (stream == null)
return;
resourceExists = true;
resourceStream = stream;
}
public static void LoadResource(string newFileNameWithExtension)
{
if(File.Exists(newFileNameWithExtension))
{
Console.WriteLine("File already exists");
return;
}
using (Stream s = File.Create(newFileNameWithExtension))
{
Console.WriteLine("Loading file");
resourceStream.CopyTo(s);
}
}
}