C#将嵌入式资源从汇编提取到pc中的特定位置?

C#将嵌入式资源从汇编提取到pc中的特定位置?,c#,winforms,export,C#,Winforms,Export,如何使用按钮单击将文件(文件类型:.jpg、.txt、.dll等)从应用程序资源代码导出到计算机上的特定位置(例如:C:\drive) 我通过单击按钮尝试了此代码: 主要代码: 更多信息: 1) 我将.dll文件上载到我的资源 2) 我将此文件生成操作更改为=“嵌入式资源” 我在下面克林特的帮助下试过了。 我现在的项目图片: 情景一(您的情景) 您有一个包含嵌入式资源(图像、txt等)的项目 您想从程序集中提取此文件并将其传输到其他位置 情景二 您有一个类库项目(dll),它有一个嵌入

如何使用按钮单击将文件(文件类型:.jpg、.txt、.dll等)从应用程序资源代码导出到计算机上的特定位置(例如:C:\drive) 我通过单击按钮尝试了此代码: 主要代码:

更多信息:

1) 我将.dll文件上载到我的资源

2) 我将此文件生成操作更改为=“嵌入式资源”

我在下面克林特的帮助下试过了。 我现在的项目图片:

情景一(您的情景)

  • 您有一个包含嵌入式资源(图像、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);
        }
      }
    }