You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用PowerShell反射执行数据库更新及示例方案说明

解决你的.NET Framework 4.7 MVC Area控制器程序集操作问题

嘿,看了你在Database Area的Update控制器里写的代码,用Assembly.GetExecutingAssembly()来操作程序集是很常见的需求,但这里有时候会因为MVC的编译机制或者程序集加载逻辑踩坑,我给你几个实用的方案和注意点:

1. 更可靠的程序集获取方式

Assembly.GetExecutingAssembly()虽然能用,但如果你的Area代码后续移到单独类库,或者MVC视图编译生成了单独的程序集,可能会拿到不是你预期的程序集。更稳妥的方式是直接通过控制器类型来获取:

public static List<string> Execute() 
{
    var returnable = new List<string>();
    // 用当前控制器的类型获取所属程序集,稳定性拉满
    var assembly = typeof(UpdateController).Assembly;
    // 这里继续你的后续逻辑...
    return returnable;
}

2. 读取嵌入资源的正确姿势

如果你的Execute方法是想读取项目里的嵌入资源(比如配置片段、文本模板),记得先把文件的生成操作设置为「嵌入的资源」(右键文件→属性里改),然后用下面的代码读取:

// 资源名称格式:[项目根命名空间].[Area名称].[资源所在文件夹].[文件名]
// 比如你的项目叫MvcDemo,资源在Database Area的Resources文件夹下叫Config.txt
var resourceName = "MvcDemo.Database.Resources.Config.txt";
using (var stream = assembly.GetManifestResourceStream(resourceName))
{
    if (stream != null)
    {
        using (var reader = new StreamReader(stream))
        {
            var content = reader.ReadToEnd();
            returnable.Add(content);
        }
    }
}

3. 调试程序集的小技巧

如果你不确定当前拿到的程序集是不是正确的,可以先在Execute里加两行调试代码:

returnable.Add($"当前程序集名称: {assembly.GetName().Name}");
returnable.Add($"程序集物理路径: {assembly.Location}");

然后在Index视图里把这个List渲染出来,就能直观看到程序集的信息,帮你快速定位问题。

4. 处理程序集加载异常

如果遇到程序集找不到的情况,可以遍历当前AppDomain已加载的所有程序集来定位:

var targetAssembly = AppDomain.CurrentDomain.GetAssemblies()
    .FirstOrDefault(a => a.GetName().Name == "你的目标程序集名称");
if (targetAssembly != null)
{
    // 用targetAssembly来执行后续操作
}

内容的提问来源于stack exchange,提问作者mckennawebdev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:35:03