После выполнения обоих следующих тестовых случаев на консоль печатается COM-исполнение. Что я делаю неправильно?
Если я запускаю либо тест по отдельности, либо если я запускаю оба теста вместе, исключение записывается на консоль ровно один раз. Это заставляет меня подозревать, что есть какой-то ресурс per- AppDomain, который я не очищаю.
Я пробовал тесты с NUnit и с MSTest, с тем же поведением в обеих средах. (На самом деле, я не уверен, что запуск обоих тестов в MSTest приводит к распечатке одного исключения или двух.)
Исключение:
System.Runtime.InteropServices.InvalidComObjectException: COM object that has been separated from its underlying RCW cannot be used.
at System.Windows.Input.TextServicesContext.StopTransitoryExtension()
at System.Windows.Input.TextServicesContext.Uninitialize(Boolean appDomainShutdown)
at System.Windows.Input.TextServicesContext.TextServicesContextShutDownListener.OnShutDown(Object target)
at MS.Internal.ShutDownListener.HandleShutDown(Object sender, EventArgs e)
Тестовый код:
using NUnit.Framework;
namespace TaskdockSidebarTests.Client
{
    [TestFixture, RequiresSTA]
    public class ElementHostRCWError
    {
        [Test]
        public void WinForms()
        {
            var form = new System.Windows.Forms.Form();
            var elementHost = new System.Windows.Forms.Integration.ElementHost();
            form.Controls.Add(elementHost);
            // If the form is not shown, the exception is not printed.
            form.Show();
            // These lines are optional. The exception is printed with or without
            form.Close();
            form.Controls.Remove(elementHost);
            elementHost.Dispose();
            form.Dispose();
        }
        [Test]
        public void WPF()
        {
            var window = new Window();
            // If the window is not shown, the exception is not printed.
            window.Show();
            window.Close();
        }
    }
}
