类库注册表更新方法可从控制台中工作,但不能从单元测试中工作

本文关键字:工作 但不能 单元测试 注册表 更新 类库 控制台 新方法 | 更新日期: 2023-09-27 18:04:35

当我从ConsoleApp调用它们时,我的类库中的以下方法工作正常。但是当我尝试对它进行单元测试时,注册表值没有更新。为什么?

我得到一个空引用错误。

namespace ClassLibrary1
{
    public class Class1
    {
        public static void MyMethod()
        {
            string targketKey = @"SOFTWARE'MyApp1";
            using (Microsoft.Win32.RegistryKey rk = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(targetKey, true))
            {
                rk.SetValue("target", "new value", Microsoft.Win32.RegistryValueKind.String);
            }
        }
    }
}

类库注册表更新方法可从控制台中工作,但不能从单元测试中工作

在对你的代码进行了一些测试之后,我想我找到了你的问题所在。请试试这个:

  • 确保HKLM'SOFTWARE'MyApp1密钥已创建
  • 将类项目的目标平台从Any CPU更改为x64
  • 保持测试项目的目标平台为任意CPU
  • 在菜单
  • 中设置测试的默认架构为x64

测试>测试设置>默认处理器架构> x64

  • 检查此代码

public static void MyMethod()
{
    var rootKey = Registry.LocalMachine.OpenSubKey("SOFTWARE", true);
    using (var existingKey = rootKey.OpenSubKey("MyApp1", true))
    {
        existingKey.SetValue("target", "double new");
        existingKey.Close();
    }    
    rootKey.Close();
}

我不明白为什么,但是如果你试图直接初始化existingKey(没有rootKey),那么它的值是null

相关文章: