导致错误的原因:不支持“ NgenLocalized”参数

时间:2019-08-14 18:46:47

标签: visual-studio msbuild nuget visual-studio-extensions

我的项目是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)&#x000D;&#x000A;   at Microsoft.VisualStudio.Services.VsTask.GetResult()</description>

这可能是相关的错误,也可能不是。

1 个答案:

答案 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 公共属性。因此,这是造成该问题的最初原因。

enter image description here

建议:

  1. 如果可以在简单的vsix项目中重现此问题,请随时报告此问题 通过帮助=>发送反馈=>将问题报告给开发者社区。

  2. 我认为此问题来自16.3.2093软件包,<UsingTask TaskName="FindVsixManifest" AssemblyFile="$(VsSDKCommonAssemblyFile)" /> Microsoft.VsSDK.targets并不完全兼容。因此,我认为您可以使用此软件包的早期版本。(16.2.3073或更早的版本,在我的机器上,我实际上使用的是16.1.3132版本,并且运行良好)

希望有帮助:)