我的项目是Visual Studio扩展。该解决方案包含多个项目,并引用了多个NuGet软件包。
在构建解决方案时,出现两个错误:
错误MSB4064:“ NgenLocalized”参数不受支持 “ GenerateFileManifest”任务。确认参数存在于任务中, 这是一个可设置的公共实例属性。
错误MSB4063:无法执行“ GenerateFileManifest”任务 用其输入参数初始化。
完整的错误是:
C:\Users\Phil\.nuget\packages\microsoft.vssdk.buildtools\16.3.2093\tools\VSSDK\Microsoft.VsSDK.targets(685,88): error MSB4064: The "NgenLocalized" parameter is not supported by the "GenerateFileManifest" task. Verify the parameter exists on the task, and it is a settable public instance property.
C:\Users\Phil\.nuget\packages\microsoft.vssdk.buildtools\16.3.2093\tools\VSSDK\Microsoft.VsSDK.targets(685,5): error MSB4063: The "GenerateFileManifest" task could not be initialized with its input parameters.
我在构建发行版或调试版本时遇到这些错误。
这些错误是什么意思,我该如何解决?
奇怪的是,如果我只是开始调试,它将在没有错误的情况下构建并启动Visual Studio。但是,在那种情况下,我无法加载我的包。
活动日志显示错误:
SetSite failed for package [MultiLanguagePackage]
Source: "MultiLanguageWPF"
Description: Method not found: "Microsoft.VisualStudio.Threading.JoinableTaskFactory Microsoft.VisualStudio.Shell.AsyncPackage.get_JoinableTaskFactory()".
System.MissingMethodException: Method not found: "Microsoft.VisualStudio.Threading.JoinableTaskFactory Microsoft.VisualStudio.Shell.AsyncPackage.get_JoinableTaskFactory()".
at MultiLanguageWPF.MultiLanguagePackage.<InitializeAsync>d__2.MoveNext()
at System.Runtime.CompilerServices.AsyncTaskMethodBuilder.Start[TStateMachine](TStateMachine& stateMachine)
at MultiLanguageWPF.MultiLanguagePackage.InitializeAsync(CancellationToken cancellationToken, IProgress`1 progress)
at Microsoft.VisualStudio.Shell.AsyncPackage.<>c__DisplayClass19_0.<<Microsoft-VisualStudio-Shell-Interop-IAsyncLoadablePackageInitialize-Initialize>b__1>d.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at Microsoft.VisualStudio.Services.VsTask.RethrowException(AggregateException e)
at Microsoft.VisualStudio.Services.VsTask.InternalGetResult(Boolean ignoreUIThreadCheck)
 at Microsoft.VisualStudio.Services.VsTask.GetResult()</description>
这可能是相关的错误,也可能不是。
答案 0 :(得分:1)
错误MSB4064:“ NgenLocalized”参数不受支持 “ GenerateFileManifest”任务。确认参数存在于任务中, 这是一个可设置的公共实例属性。
错误MSB4063:无法执行“ GenerateFileManifest”任务 用其输入参数初始化。
由于我缺少有关您的项目的足够必要的信息,因此无法在我的机器上重现相同的问题。但是我想这可能是关于Microsoft.VSSDK.BuildTools
版本的16.3.2093
软件包的问题。
一些测试和发现:
Msbuild使用目标来管理构建过程。我们可以将msbuild target视为msbuild tasks的组。该任务是MSBuild用于执行基本构建操作的可执行代码单元。
我在第685行打开了Microsoft.VsSDK.targets
(version)文件,并在下面找到了内容:
<Target Name="GenerateFileManifest"
Outputs="$(FileManifest)"
DependsOnTargets="$(GenerateFileManifestDependsOn)">
<GenerateFileManifest FileItems="@(VsixSourceItem)" FileManifest="$(FileManifest)" NgenLocalized="$(NgenLocalized)">
<Output TaskParameter="FileManifest" ItemName="FileWrites" />
</GenerateFileManifest>
</Target>
因此,在您的vsix项目的构建过程中,很明显,它将调用GenerateFileManifest
目标,并且此目标将调用并执行GenerateFileManifest
任务。
请参见this,我们可以更好地了解what the task means and what it really does for us during build process
。 实际上要执行GenerateFileManifest任务类似于从GenerateFileManifest类调用方法。根据{{1}}这三个输入参数,这个FileItems="xxx" FileManifest="xxx" NgenLocalized="xxx"
类应具有三个 public属性。 (尽管它实际上没有在GenerateFileManifest类中定义的公共属性NgenLocalized)
然后GenerateFileManifest
文件中的另一行指示程序集Microsoft.VsSDK.targets
中的此类,它实际上是同一文件夹中的$(VsSDKCommonAssemblyFile)
。 (Microsoft.VisualStudio.Sdk.BuildTasks.dll
)
C:\Users\xxx\.nuget\packages\microsoft.vssdk.buildtools\16.3.2093\tools\VSSDK\
查看该程序集的结构后,找不到所需的 NgenLocalized 公共属性。因此,这是造成该问题的最初原因。
建议:
如果可以在简单的vsix项目中重现此问题,请随时报告此问题 通过帮助=>发送反馈=>将问题报告给开发者社区。 p>
我认为此问题来自16.3.2093软件包,<UsingTask TaskName="FindVsixManifest" AssemblyFile="$(VsSDKCommonAssemblyFile)" />
与Microsoft.VsSDK.targets
并不完全兼容。因此,我认为您可以使用此软件包的早期版本。(16.2.3073或更早的版本,在我的机器上,我实际上使用的是16.1.3132版本,并且运行良好)
希望有帮助:)