当我想在Visual Studio 2015中更新扩展时,我正在运行异常。每次我更新扩展时,我都会得到一个文件已经在使用异常。我将其跟踪到文件* .pkgdef。
我只在我的工作电脑上运行此异常。本机运行带有McAfee Antivirus,防火墙和驱动器加密的Windows 8.1。我觉得驱动器加密与此异常有关,但我不能肯定地说这个。
我调试了VSIXInstaller,发现了一些我认为是bug的东西。 该类是程序集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;
}
异常发生在AtomicallyDeleteFiles的File.Move中。我认为在那时我们打算使用File.Copy。该文件无法移动,因为它首先被锁定。
我无法确定的原因是,这只发生在我的McAfee计算机上。但是这里也报告了这个问题Can't Update or Uninstall NuGet Package Manager in VS2012和http://www.paraesthesia.com/archive/2013/07/30/upgrading-nuget-the-process-cannot-access-the-file-because-it.aspx/。
我不知道如何与Visual Studio团队取得联系。你会认为这也是一个错误吗?任何人都可以帮我报告这个吗?
此致 T4E
答案 0 :(得分:0)
我认为向Visual Studio提供反馈的适当位置是Microsoft Connect。不幸的是,VS不是开源的,所以你不能提供拉取请求。我遇到了同样的问题,你的发现似乎很合理 - 虽然我的机器上也有迈克菲的事实是可疑的。