Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/282.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#_Assembly Resolution - Fatal编程技术网

C#自主更新

C#自主更新,c#,assembly-resolution,C#,Assembly Resolution,在我的新项目(windows-C#-vs2008)中,我希望可执行文件能够自动更新自己——可能是从网络服务器更新 这里我要做的是将任何更新的DLL下载到“独立存储”(每个DLL都是独立的DLL),然后修改CurrentDomain_AssemblyResolve()方法 这样,在从可执行文件加载库之前,它首先检查其独立存储中是否存在库。 但是,如果我想更改主exe中的某些内容,该怎么办。 [我尝试创建一个加载程序项目(控制台ap),它从中调用我的主程序(更改输出为dll),但是这次程序集解析事件

在我的新项目(windows-C#-vs2008)中,我希望可执行文件能够自动更新自己——可能是从网络服务器更新 这里我要做的是将任何更新的DLL下载到“独立存储”(每个DLL都是独立的DLL),然后修改CurrentDomain_AssemblyResolve()方法

这样,在从可执行文件加载库之前,它首先检查其独立存储中是否存在库。 但是,如果我想更改主exe中的某些内容,该怎么办。 [我尝试创建一个加载程序项目(控制台ap),它从中调用我的主程序(更改输出为dll),但是这次程序集解析事件没有触发,因为在编译过程中,引用dll是在新加载程序项目的bin文件夹下生成的] 任何帮助都将不胜感激

public static Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
        {
            try
            {
                string assemName = new AssemblyName(args.Name).Name;

                object i_StoreRootDir = i_StorageFile.GetType().GetField
                    ("m_RootDir", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(i_StorageFile);

                string i_StorePath = CombinePaths(i_StoreRootDir.ToString(), I_STOREDIR, assemName, DLL_EXT);

                if (File.Exists(i_StorePath))
                {
                    return Assembly.LoadFrom(i_StorePath);
                }
                else
                {
                    //load it from resource.
                    return null;
                }
            }
            catch (Exception)
            {
                throw;
            }

作为框架的一部分,您可以查看。你也可以结帐。还有。

很抱歉,我在应用程序中使用了许多注册表更新和注册表修改,我认为Clickonce不是一个好办法。
public static Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
        {
            try
            {
                string assemName = new AssemblyName(args.Name).Name;

                object i_StoreRootDir = i_StorageFile.GetType().GetField
                    ("m_RootDir", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(i_StorageFile);

                string i_StorePath = CombinePaths(i_StoreRootDir.ToString(), I_STOREDIR, assemName, DLL_EXT);

                if (File.Exists(i_StorePath))
                {
                    return Assembly.LoadFrom(i_StorePath);
                }
                else
                {
                    //load it from resource.
                    return null;
                }
            }
            catch (Exception)
            {
                throw;
            }