Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在构建C#应用程序后添加/替换资源_C# - Fatal编程技术网

在构建C#应用程序后添加/替换资源

在构建C#应用程序后添加/替换资源,c#,C#,我有一个C#应用程序,它将exe文件和脚本作为嵌入式资源存储在.resx文件中 我正试图找到一种方法,在不进行完全重建的情况下替换嵌入式资源。这样,当脚本或可执行文件进行版本控制时,我只需要交换它们,而不是进行完整的重建 到目前为止,我已经找到了可以向可执行文件添加和替换资源(卫星资源?)的方法,但我还无法在我的C#应用程序中访问这些资源 到目前为止,我只找到了一种访问嵌入式资源的方法,我在构建之后附加的资源没有显示出来 // This only retrieves the co

我有一个C#应用程序,它将exe文件和脚本作为嵌入式资源存储在.resx文件中

我正试图找到一种方法,在不进行完全重建的情况下替换嵌入式资源。这样,当脚本或可执行文件进行版本控制时,我只需要交换它们,而不是进行完整的重建

到目前为止,我已经找到了可以向可执行文件添加和替换资源(卫星资源?)的方法,但我还无法在我的C#应用程序中访问这些资源

到目前为止,我只找到了一种访问嵌入式资源的方法,我在构建之后附加的资源没有显示出来

        // This only retrieves the contents of embedded .resx files
        System.Reflection.Assembly thisExe;
        thisExe = System.Reflection.Assembly.GetEntryAssembly();

        // List files in .resx of known name.
        ResourceSet rs = <my resource>.ResourceManager.GetResourceSet(System.Globalization.CultureInfo.CurrentUICulture, true, true);
        Dictionary<string, object> resources = rs.Cast<DictionaryEntry>().ToDictionary(r => (string)r.Key, r => r.Value);

        foreach (string key in resources.Keys)
            Console.WriteLine(key);
//这仅检索嵌入的.resx文件的内容
System.Reflection.exe;
thisExe=System.Reflection.Assembly.GetEntryAssembly();
//在.resx中列出已知名称的文件。
ResourceSet rs=.ResourceManager.GetResourceSet(System.Globalization.CultureInfo.CurrentUICulture,true,true);
Dictionary resources=rs.Cast().ToDictionary(r=>(string)r.Key,r=>r.Value);
foreach(resources.Keys中的字符串键)
控制台。写入线(键);

资源在应用程序的整个生命周期中都是静态的,如果您使用的是脚本(基于文本)和exe文件,我会将它们保存在普通文件中。如果您想保护它们不被修改,您可以在运行它们时始终对它们进行加密/解密。修改Resx文件是一件痛苦的事情,因为它需要在客户端计算机上安装其他组件(您没有注意到,因为您有Visual Studio)。很抱歉,我不清楚,这些文件在可执行文件发布后是静态的。我只想在最后一刻脚本发生变化的情况下,在发布之前能够替换其中的一些脚本。这个问题仍然有效吗?你找到答案了吗?我目前正在尝试类似的方法。(差不多)。我知道如何阅读嵌入式(卫星?)资源,但我不知道如何将其添加到VisualStudio之外。要读取嵌入式程序集,需要使用
assembly.GetManifestResourceStream(字符串名称)
函数。但您可能无法将此程序集作为标准资源访问,而只能作为二进制文件访问。但是,您可以加载另一个DLL并通过函数从嵌入的DLL读取资源。