在Xamarin Forms Portable项目中每次构建后,引用的dll(由引用的项目构建)都被锁定了吗?

时间:2017-07-09 09:15:35

标签: visual-studio xamarin dll build xamarin.forms

我正在构建我的第一个Xamarin Forms应用程序(之前我已经构建了一个,但它是一个Xamarin Android应用程序)。有一个奇怪的问题会阻止我每次调试我的应用程序。主要的Xamarin Forms Portable项目还有其他2个可移植库项目的参考。因此,在Android项目的每次构建之后(仅作为示例),2个输出DLL(来自引用的项目)被锁定(通过 devenv.exe )。这意味着我不能简单地重建它,同时保持VS开放。在重新打开项目并再次构建之前,我必须关闭VS并手动删除输出DLL。这完全不可接受。

我发现输出dll以某种方式缓存在名为 ProjectAssemblies 的文件夹中,它通常位于 C:\ Users [UserAccount] \ AppData \ Local \ Microsoft \ VisualStudio \ 14.0 \ ProjectAssemblies (适用于Visual Studio 2015)。

但这只是我认识到的一个奇怪的信号,我的意思是它似乎不是真正的问题,因为即使我删除了那里的所有文件,重新启动后VS输出dll仍然会加载到 devenv.exe (我使用Process Hacker查找这些dll并知道它们是由 devenv.exe 加载的)。防止这种情况的唯一方法是删除文件夹 bin 中的输出dll。但这只能工作一次,如果重建项目我必须重做所有这些步骤(关闭VS,删除输出dll,重新打开VS)。

唯一的最终方法可能是仅将输出DLL添加为引用(而不是项目)但不允许轻松调试引用项目中的代码(仍然引用的项目是主要解决方案的一部分,它们不是某种即用型独立库。)

更新

通过使用Process Hacker,我知道Xamarin Forms项目的一些基本DLL(例如Xamarin.Forms.Core.dll)也被加载到 devenv.exe 但是它们是从 ProjectAssemblies 中的路径加载的(如前所述)。因此,这些DLL未锁定,可以从 bin 文件夹中清除它们。但不知怎的,我的项目dll没有得到同样的对待。似乎有2个版本加载到 devenv.exe ,一个来自 ProjectAssemblies ,另一个来自 bin 文件夹(特定于平台的项目,而不是主要的可移植项目)。这就是为什么它被锁定而且在重建时无法清理/覆盖。

1 个答案:

答案 0 :(得分:1)

我认为你正在使用版本15.2(26430.12)中修复的issue(Compilaion因为进程无法访问dll而失败)。查看release notes

对于许多开发者来说,这个特殊的错误是一场噩梦,包括我。

如果是这种情况,更新VisualStudio将修复它。