2017-08-24 55 views
0

我对C#来说比较新,在处理一个项目以旋转虚拟机(以及MS Azure中的支持资源)时遇到了此错误。System.ArgumentNullException:'值不能为空。'

我使用的代码是下面的一个:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using Microsoft.Azure.Management.Compute.Fluent; 
using Microsoft.Azure.Management.Compute.Fluent.Models; 
using Microsoft.Azure.Management.Fluent; 
using Microsoft.Azure.Management.ResourceManager.Fluent; 
using Microsoft.Azure.Management.ResourceManager.Fluent.Core; 
namespace ConsoleApp1 
{ 
    class Program 
    { 
     private static void Main(string[] args) 
     { 

      var credentials = SdkContext.AzureCredentialsFactory.FromFile(Environment.GetEnvironmentVariable("AZURE_AUTH_LOCATION")); 
      var azure = Azure 
       .Configure() 
       .WithLogLevel(HttpLoggingDelegatingHandler.Level.Basic) 
       .Authenticate(credentials) 
       .WithDefaultSubscription(); 

我也有一个“azureauth.properties.txt”文件我用来设置代码中引用上面"AZURE_AUTH_LOCATION"一个新的环境路径。

要设置我用简单的PS命令的路径:

[Environment]::SetEnvironmentVariable("AZURE_AUTH_LOCATION", "C:\MY-PATH\azureauth.properties", "User") 

的azureauth.properties文件包含简单的租户/应用/钥匙ID格式

subscription=<subscription-id> 
client=<application-id> 
key=<authentication-key> 
tenant=<tenant-id> 
managementURI=https://management.core.windows.net/ 
baseURL=https://management.azure.com/ 
authURL=https://login.windows.net/ 
graphURL=https://graph.windows.net/ 

每当我试图运行该项目我得到一个错误说:

System.ArgumentNullException:'值不能为空'。

专为线:

var credentials = SdkContext.AzureCredentialsFactory.FromFile(Environment.GetEnvironmentVariable("AZURE_AUTH_LOCATION")); 

任何想法,为什么?

+0

检查从* Environment.GetEnvironmentVariable(“AZURE_AUTH_LOCATION”)的结果* - 看来,这是空,因此,你必须考虑为什么环境变量是未知的过程 –

+0

您可以添加堆栈跟踪更好的帮助? –

+1

请尝试重新启动Visual Studio并再试一次,然后它应该工作。 –

回答

0

Environment.GetEnvironmentVariable("AZURE_AUTH_LOCATION")必须返回null。

如果是这种情况,您可能需要检查该环境变量是否已实际定义或文件是否存在。

像定义一个变量:

var location = Environment.GetEnvironmentVariable("AZURE_AUTH_LOCATION"); 

当你在VS调试,你应该能够通过右击它并单击快速监视检查的价值定位。

1

像luxun说的,你必须定义环境变量。 对于打开CMD(在Windows上)写:

集AZURE_AUTH_LOCATION

这将显示环境变量 “AZURE_AUTH_LOCATION”。如果结果是“环境变量AZURE_AUTH_LOCATION没有定义”,或者如果路径是错误的,那么在CMD写:

SET AZURE_AUTH_LOCATION = PathOfTheAzureAuthLocationFile

这应该做的伎俩。

+0

我已经这样做了,但不幸的是同一个问题。我仍然收到VS – Steba

+0

中的错误如果您像这样设置了一个环境变量,那么它仅适用于该进程以及设置后创建的所有子进程。你应该记住 –

+0

@Steba你还会得到这个错误吗?你可以分享堆栈跟踪吗? 谢谢 –

0

非常感谢您的建议。 最后,错误是由一名男生在第一次设置Env变量时产生的(相对路径包含一个我以前没有发现的错误)的错误。

我最终能够运行它。

进行了更改以在配置文件中定义路径。

感谢

相关问题