重新定位不重新加载零件



说来话长。。。很抱歉

我正在使用PartUpdatesInPlace中的示例,并更改代码,以便在从Extensions路径中删除它之后可以重新加载Extension1.dll。

我在删除Extension1.dll后设置了一个断点,更改Bar,使其返回一个不同的字符串重新编译,然后刷新目录,希望当OnImportsStatisfyed运行时,它会返回更新的字符串,但它不会。

根据原件,ShadowCopyAssembly已启用。

/// setup catalogs and container and instance of BarWatcher
Console.WriteLine("Press enter to add a new bar");
Console.ReadLine();
//copy in a bar and refresh
File.Copy(BinDir + @"......PartUpdatesInPlaceExtensions2bindebugPartUpdatesInPlaceExtensions2.dll", ExtensionsPath + "Extensions2.dll");
directoryCatalog.Refresh();
Console.WriteLine("Press enter to remove the first bar");
Console.ReadLine();
//delete the original bar and refresh
File.Delete(ExtensionsPath + "Extensions1.dll");
directoryCatalog.Refresh();

//在下面设置断点行Console.WriteLine("按回车键可重新添加原始栏");Console.ReadLine();//在栏中复制并刷新File.Copy(BinDir+@"……\PartUpdatesInPlaceExtensions\bin\debug\PartUpdatesInPlaceExtensions.dll",ExtensionPath+"Extension1.dll");directoryCatalog.Refresh();

container.Compose(batch);
Console.ReadLine();

我可以将所有的代码添加到一个存储库中,如果这样做会更简单的话。我的"Microsoft.Composition"版本是1.0.20(从Nuget获得)

你知道为什么会这样吗?

据我所知,重组应该发生,因为它在BarWatcher中启用

[Export]
public class BarWatcher : IPartImportsSatisfiedNotification
{
[ImportMany(AllowRecomposition = true)]
public IEnumerable<IBar> Bars { get; set; }
public void OnImportsSatisfied()
{
if (Bars.Any())
{
foreach (var bar in Bars)
Console.WriteLine("bar-"+bar.Foo());
}
else
Console.WriteLine("No Bars present");
Console.WriteLine("n");
}
}

因此,在Glenn Block(写MEF和样本的人之一)的一些帮助下,我们发现只有在VS中调试这个样本并使用相同的VS实例重建时才会出现问题,如果使用另一个VS或Roslyn实例重建(我试着这样做只是为了玩它),它会正常工作。

相关内容

  • 没有找到相关文章

最新更新