C# 预编译的.net 4.0应用程序无法在其他windows安装上运行(错误:尝试从网络地址加载程序集)

C# 预编译的.net 4.0应用程序无法在其他windows安装上运行(错误:尝试从网络地址加载程序集),c#,C#,解决方案:我不得不在Windows资源管理器的“文件属性”对话框中单击“取消阻止” 我用c#制作了一个应用程序,因为我认为它可以在所有windows版本上运行。今天我在父亲家,从github下载了我的预编译应用程序。它正在运行,但完全不像预期的那样!gridview中高亮显示的行不可见,tabcontrol上的scollbars不工作,以及其他一些或多或少的小错误。我没有时间下载VisualStudio来重新编译它,但这是常见的行为吗?我父亲在windows 7上运行,我看到安装了.NET fr

解决方案:我不得不在Windows资源管理器的“文件属性”对话框中单击“取消阻止”

我用c#制作了一个应用程序,因为我认为它可以在所有windows版本上运行。今天我在父亲家,从github下载了我的预编译应用程序。它正在运行,但完全不像预期的那样!gridview中高亮显示的行不可见,tabcontrol上的scollbars不工作,以及其他一些或多或少的小错误。我没有时间下载VisualStudio来重新编译它,但这是常见的行为吗?我父亲在windows 7上运行,我看到安装了.NET framework 4.5,我用v4.0编译了我的应用程序,所以我认为应该没有兼容性问题。在那之后,我还在家里创建了一个Windows10虚拟机,并意识到这也是同样的行为。我知道突出显示的行或滚动条并不重要,但我也有一个插件系统来加载和反映额外的库,这是我的应用程序的一个基本功能。而且程序集加载器也不能工作——只能在我编译的机器上工作

我应该在多个版本上编译它以支持任何“未知”用户及其操作系统吗?我看到微软说我可以使用来确定用户的版本,但我可以在我的应用程序安装后确定,所以我应该创建一些下载程序来在安装后下载正确的版本,或者这是什么意思

编辑我在youtube上上传了一段视频,展示它应该如何工作以及如何准确工作

编辑我收到一条错误消息(翻译自德语)“试图从网络地址加载程序集”,但我不理解这条消息,我从未这样做过。。我使用

    private void m_btnRegisterModule_Click(object objectSender, EventArgs eventArgs)
    {
        OpenFileDialog openFileDialog = new OpenFileDialog();
        openFileDialog.Multiselect = true;
        openFileDialog.Title = "Register Stack";
        openFileDialog.Filter = "Assemblies (*.exe, *.dll)|*.exe;*.dll|All Files (*.*)|*.*";
        if (openFileDialog.ShowDialog(this) == DialogResult.Cancel) return;
        Assembly assembly = null;
        foreach (String file in openFileDialog.FileNames)
        {
            try
            {
                assembly = System.Reflection.Assembly.LoadFile(file);
            } catch (Exception) { return; }
            Type[] arrayTypes = assembly.GetExportedTypes();
            foreach (Type type in arrayTypes)
            {
                if (!typeof(ScriptStack.Runtime.Stack).IsAssignableFrom(type)) continue;
                ConstructorInfo constructorInfo = null;
                try
                {
                    constructorInfo = type.GetConstructor(new Type[0]);
                }
                catch (Exception) { continue; }
                try
                {
                    object objectHostModule = constructorInfo.Invoke(new object[0]);
                    ScriptStack.Runtime.Stack hostModule = (ScriptStack.Runtime.Stack)objectHostModule;
                    m_scriptManager.RegisterHostStack(hostModule);
                }
                catch (Exception) { continue; }
            }
        }
        UpdateModuleControl();
        pluginFilter.Select();
    }
我找到并尝试加载它。。否则。让我们看看如何。现在,我创建了一个messagebox来查看确切的异常


编辑解决方案:我必须在Windows资源管理器的文件属性对话框中单击“取消阻止”。

在Windows资源管理器的文件属性对话框中单击“取消阻止”以某种方式解决了我的问题。我说的“在某种程度上”是指我不能期望每个人都知道这一点,所以有人会认为这是不起作用的废话而放弃应用程序。。我想

是否可以共享一些代码—您是如何加载程序集的,它不是加载所有程序集,还是只加载在您的机器上编译的程序集?如果找不到或未加载程序集的依赖项,则通常无法加载程序集进行反射(存在某些例外)。您是否检索了整个bin文件夹并运行,而不仅仅是exe?@Alander“整个bin文件夹”是什么意思?我提供了所需的exe和dll,当然不是pdb文件。@Alander也许你可以看看我提供的视频made@mbshambharkar我更新了我的问题,似乎真的是在加载。。它说明我试图从网络地址加载程序集,但我没有!检查部件是否被阻止或是否支持加载被阻止的部件