引用 Windows SDK winmd 文件和 VS Team Services 构建

tym*_*tam 2 c# winapi winmd azure-devops azure-pipelines

我创建了一个 C# .Net Standard 库,它引用了两个 Windows SDK 库。

在此处输入图片说明

参考文献是

  • C:\Program Files (x86)\Windows Kits\10\References\10.0.16299.0\Windows.Foundation.FoundationContract\3.0.0.0\Windows.Foundation.FoundationContract.winmd
  • C:\Program Files (x86)\Windows Kits\10\References\10.0.16299.0\Windows.Foundation.UniversalApiContract\5.0.0.0\Windows.Foundation.UniversalApiContract.winmd

这适用于我的本地开发机器。

VS Team Services 构建首先显示以下警告:

2018-06-13T01:17:22.3393846Z ##[warning]C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild\15.0\Bin\Microsoft.Common.CurrentVersion.targets(2106,5): Warning MSB3245: Could not resolve this reference. Could not locate the assembly "Windows.Foundation.FoundationContract". Check to make sure the assembly exists on disk. If this reference is required by your code, you may get compilation errors.

后来它失败并出现以下错误:

Error CS0246: The type or namespace name 'Windows' could not be found (are you missing a using directive or an assembly reference?)

天真地,我以为我只需要在 Visual Studio 中将 Copy Local 设置为 True 即可,一切都会好起来的。我错了。

题

如何在 VSTS 中构建引用 SDKwinmd文件的项目?

sta*_*SFT 5

请参阅以下步骤来处理此问题:

  1. 右键单击 Visual Studio 中的项目 > 编辑 {项目名称}
  2. 将这些程序集的相对路径替换为绝对路径

示例代码:

<ItemGroup>
    <Reference Include="Windows.Foundation.FoundationContract">
      <HintPath>C:\Program Files (x86)\Windows Kits\10\References\10.0.16299.0\Windows.Foundation.FoundationContract\3.0.0.0\Windows.Foundation.FoundationContract.winmd</HintPath>
      <IsWinMDFile>true</IsWinMDFile>
    </Reference>
    <Reference Include="Windows.Foundation.UniversalApiContract">
      <HintPath>C:\Program Files (x86)\Windows Kits\10\References\10.0.16299.0\Windows.Foundation.UniversalApiContract\5.0.0.0\Windows.Foundation.UniversalApiContract.winmd</HintPath>
      <IsWinMDFile>true</IsWinMDFile>
    </Reference>
  </ItemGroup>
Run Code Online (Sandbox Code Playgroud)