0

这是我的示例:

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

这是我安装的工具包的截图:

在此处输入图像描述

这是我的输出:

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

4

2 回答 2

1

您要查找的类型在 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 信息目标操作系统版本。

于 2019-07-06T07:48:12.607 回答
0

您的代码不正确。Windows.Networking.Vpn命名空间用于 UWP 应用程序,并且在您的代码中您尝试使用 System.Console.WriteLine() 函数,该函数在此上下文中无效。即使 csc.exe 抛出的唯一错误是找不到文件,这也不是您的问题。尝试在 Visual Studio 中创建一个新的UWP应用程序并在 Visual Studio 中编译它,因为这样会更容易。

于 2019-07-06T05:31:02.123 回答