Не удалось найти файл метаданных при попытке компиляции из cmd - PullRequest
0 голосов
/ 06 июля 2019

Вот мой пример:

using System;
using Windows.Networking.Vpn;
static void main()
{VpnManagementAgent mgr = new VpnManagementAgent();
 VpnNativeProfile profile = new VpnNativeProfile() { AlwaysOn = false,
    NativeProtocolType = VpnNativeProtocolType.L2tp,
    ProfileName = "MyConnection",
    RememberCredentials = true, RequireVpnClientAppUI = true,
    RoutingPolicyType = VpnRoutingPolicyType.SplitRouting,
    TunnelAuthenticationMethod = VpnAuthenticationMethod.PresharedKey,
    UserAuthenticationMethod = VpnAuthenticationMethod.Mschapv2, }; 
    profile.Servers.Add("vpn.example.com"); 
    VpnManagementErrorStatus profileStatus = await mgr.AddProfileFromObjectAsync(profile);
    Console.WriteLine($"{profileStatus}\n");  }

Вот как я пытаюсь скомпилировать (из командной строки разработчика для VS 2019):

csc program.cs /r:Windows.Networking.Vpn.dll

Вот скриншотмои установленные наборы инструментов:

enter image description here

Вот мой вывод:

Microsoft (R) Visual C# Compiler version 3.100.119.28106 (58a4b1e7)
Copyright (C) Microsoft Corporation. All rights reserved.

error CS0006: Metadata file 'Windows.Networking.Vpn.dll' could not be found

Вот ссылка с msdn:

Сборки: Windows.Networking.Vpn.dll, Windows.dll

Ответы [ 2 ]

1 голос
/ 06 июля 2019

Типы, которые вы ищете, определены в файлах метаданных среды выполнения Windows и реализованы в собственном коде.Вам нужно будет ссылаться на WinMD.Есть несколько ярлыков (например, ссылки на метаданные, установленные в ОС), но они сделают ваш проект хрупким.Как правило, вы хотите сослаться на установленную версию SDK.Вы можете использовать переменные пути из командной строки VS, чтобы помочь немного, например (с 17763 SDK):

csc Program.cs \
-reference:"%WindowsSdkDir%\References\%WindowsSdkVersion%\Windows.Foundation.FoundationContract\3.0.0.0\Windows.Foundation.FoundationContract.winmd" \
-reference:"%WindowsSdkDir%\References\%WindowsSdkVersion%\Windows.Foundation.UniversalApiContract\7.0.0.0\Windows.Foundation.UniversalApiContract.winmd"

Однако это все равно будет иметь некоторую хрупкость, так как номера версий контракта в этих путях будут менятьсяс обновлениями SDK.Система проекта VS считывает текущие контракты из "% WindowsSdkDir% \ Platforms \ UAP \% WindowsSdkVersion% \ Platform.xml" или "% WindowsSdkDir% \ Platforms \ UAP \% WindowsSdkVersion% \ PreviousPlatforms.xml", чтобы получить правильную информацию API дляцелевая версия операционной системы.

0 голосов
/ 06 июля 2019

Ваш код неверен. Пространство имен Windows.Networking.Vpn предназначено для приложений UWP, и в своем коде вы пытаетесь использовать функцию System.Console.WriteLine (), которая в этом контексте недопустима. Хотя единственная ошибка, которую выдает csc.exe - файл не найден, это не ваша проблема. попробуйте создать новое приложение UWP в Visual Studio и скомпилировать его в Visual Studio, так как это значительно облегчит его работу.

...