Visual Studio Tool VSIXInstaller中可能存在的bug
本文关键字:存在 bug Studio Tool VSIXInstaller Visual | 更新日期: 2023-09-27 18:10:48
当我想在Visual Studio 2015中更新扩展时,我正在异常运行。每次我更新一个扩展,我会得到一个文件已经在使用异常。我追踪到*.pkgdef文件。
我只在我的工作pc上运行此异常。这台机器运行Windows 8.1,带有McAfee防病毒、防火墙和驱动器加密。我有一种感觉,驱动器加密与这个异常有关,但我不能肯定。
我调试了VSIXInstaller,发现了一些我认为是错误的东西。这个类是在Microsoft.VisualStudio.ExtensionManager.Implementation.dll中的ExtensionManagerService.cs。
private void AtomicallyDeleteFiles(IEnumerable<string> filePaths, bool justMarkForDeletion)
{
foreach (FileStream fileStream in this.LockFiles(filePaths, (IList<string>) null))
{
if (justMarkForDeletion)
{
string str = fileStream.Name + ".deleteme";
File.Delete(str);
File.Move(fileStream.Name, str);
}
else
File.Delete(fileStream.Name);
fileStream.Close();
}
}
LockFiles方法的实现如下:
private IEnumerable<FileStream> LockFiles(IEnumerable<string> filePaths, IList<string> inUse = null)
{
List<FileStream> list = new List<FileStream>();
foreach (string path in filePaths)
{
try
{
FileAttributes attributes = File.GetAttributes(path);
if ((attributes & FileAttributes.ReadOnly) == FileAttributes.ReadOnly)
{
FileAttributes fileAttributes = attributes & ~FileAttributes.ReadOnly;
File.SetAttributes(path, fileAttributes);
}
FileStream fileStream = new FileStream(path, FileMode.Open, FileAccess.Write, FileShare.Delete);
list.Add(fileStream);
}
catch (Exception ex)
{
if (ex is FileNotFoundException)
{
try
{
Registry.SetValue("HKEY_LOCAL_MACHINE''Software''Microsoft''VisualStudio''Extensibility''ExtensionSDKDeletionListStore''", "ScanForDeleteMeExtensionSDKsAtStartup", (object) 1, RegistryValueKind.DWord);
Registry.SetValue("HKEY_CURRENT_USER''Software''Microsoft''VisualStudio''Extensibility''ExtensionSDKDeletionListStore''", "ScanForDeleteMeExtensionSDKsAtStartup", (object) 1, RegistryValueKind.DWord);
}
catch
{
}
}
if (inUse == null)
{
foreach (Stream stream in list)
stream.Close();
throw;
}
else
inUse.Add(path);
}
}
return (IEnumerable<FileStream>) list;
}
异常发生在File。移动到AtomicallyDeleteFiles。我认为在那一点上,一个文件。副本是要被使用的。
文件不能移动,因为它一开始就被锁定了。我不能确定的是为什么这只发生在我的McAfee机器上。但是这个问题也报告在这里Can't更新或卸载NuGet包管理器在VS2012和这里http://www.paraesthesia.com/archive/2013/07/30/upgrading-nuget-the-process-cannot-access-the-file-because-it.aspx/。
我不知道如何与Visual Studio团队取得联系。你会认为这也是一个bug吗?谁能帮我报告一下这个?
的问候T4E
我认为把反馈放到Visual Studio的合适位置是Microsoft Connect。不幸的是,VS不是开源的,所以你不能向他们提供拉请求。我也遇到过同样的问题,你的发现似乎是合理的——尽管我的电脑上也安装了McAfee,这一事实令人怀疑。