我有一个非常奇怪的问题。我在项目中添加了对System.Management.Automation的引用,我试图调用以下代码:
using (Powershell ps = Powershell.Create())
{
ps.AddScript("Get-AppxPackage");
ps.Invoke();
}
请注意,我可以用这种方式运行其他powershell命令,只有引发异常的Appx命令。运行Get-AppxPackage命令会导致ItemNotFoundException。错误是:
抛出异常:System.Management.Automation.dll中的“System.Management.Automation.ItemNotFoundException”
其他信息:找不到路径'C:\ Users \ xxxx \ Documents \ WindowsPowerShell \ Modules',因为它不存在。
我的第一个假设是,这可能是一个工作目录,所以我在调用命令之前显式设置工作目录,但这并没有改变任何东西。然后我检查了,那个目录不存在,所以我创建它只是为了看看会发生什么。创建目录并再次运行代码后,我收到此错误:
抛出异常:System.Management.Automation.dll中的“System.Management.Automation.ItemNotFoundException”
其他信息:找不到路径'C:\ windows \ system32 \ windowspowershell \ v1.0 \ Modules \ Appx \ Microsoft.Windows.Appx.PackageManager.Commands',因为它没有
老实说,我不知道这里发生了什么。为了使问题更加奇怪,我在另一台计算机上尝试了这个,代码工作正常。因此,在一台计算机上Visual Studio或我的项目一定有问题。
我尝试删除debug和obj文件夹,suo以及所有这些。我删除了对System.Management.Automation的引用并重新添加它,甚至重新启动它们。我不知所措,我不知道为什么会这样,或者我还能做些什么来解决这个问题。
注意:我可以在Powershell ISE中运行Appx命令,因此计算机上没有问题。问题只在于通过System.Management.Automation dll调用该命令。
非常感谢任何帮助。
答案 0 :(得分:0)
好的,这个问题似乎是由于通过软件包管理器将不正确版本的System.Management.Automation安装为nuget软件包引起的。我已经卸载了这个,然后在我开始解决上述问题之前手动添加了对最新版DLL的引用。
但是,由于项目继续引用此版本,因此nuget包的卸载显然无法正常工作,我尝试过的任何内容都无法使用新版本。
为了解决这个问题,我创建了一个新项目,添加了源文件,直接添加了对新版System.Management.Automation的引用,并且错误停止了。
我只能假设使用软件包管理器安装和卸载错误的版本会破坏第一个项目。