1

specflow/CodedUI/VSTS 2012 を使用して UI 自動化を試みています。

シナリオを実行しようとすると、次のエラーが表示されます。依存関係。システムは、指定されたファイルを見つけることができません。

このエラーを解決する方法を教えてもらえますか?

4

1 に答える 1

1

最後に、この問題を解決する方法を見つけました。理由はわかりませんが、独自のアセンブリ リゾルバーを作成する必要があります。ここで解決策を見つけました:

http://blog.csdn.net/marryshi/article/details/8100194

ただし、VS2012 のレジストリ パスを更新する必要がありました。

static Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
{
    AssemblyName assemblyName = new AssemblyName(args.Name);
    if (assemblyName.Name.StartsWith("Microsoft.VisualStudio.TestTools.UITest", StringComparison.Ordinal))
    {
        string path = string.Empty;
        using (RegistryKey key = Registry.LocalMachine.OpenSubKey(@"Software\Microsoft\VisualStudio\11.0"))
        {
            if (key != null)
            {
                path = key.GetValue("InstallDir") as string;
            }
        }

        if (!string.IsNullOrWhiteSpace(path))
        {
            string assemblyPath = Path.Combine(path, "PublicAssemblies",
                string.Format(CultureInfo.InvariantCulture, "{0}.dll", assemblyName.Name));

            if (!File.Exists(assemblyPath))
            {
                assemblyPath = Path.Combine(path, "PrivateAssemblies",
                   string.Format(CultureInfo.InvariantCulture, "{0}.dll", assemblyName.Name));

                if (!File.Exists(assemblyPath))
                {
                   string commonFiles = Environment.GetFolderPath(Environment.SpecialFolder.CommonProgramFilesX86);
                   if (string.IsNullOrWhiteSpace(commonFiles))
                   {
                       commonFiles = Environment.GetFolderPath(Environment.SpecialFolder.CommonProgramFiles);
                   }

                   assemblyPath = Path.Combine(commonFiles, "Microsoft Shared", "VSTT", "10.0",
                       string.Format(CultureInfo.InvariantCulture, "{0}.dll", assemblyName.Name));
                }
            }

            if (File.Exists(assemblyPath))
            {
                return Assembly.LoadFrom(assemblyPath);
            }
        }
    }

    return null;
}

そして、機能を実行する前にリゾルバーを登録します。

[BeforeFeature]
public static void Initialize()
{
    AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(CurrentDomain_AssemblyResolve);
}
于 2014-03-25T18:06:01.767 に答える