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

时间:2017-08-24 09:36:14

标签: c# azure cloud

我对C#比较新,我在处理一个项目来驱动VM(并在MS Azure中支持资源)时遇到了这个错误。

我使用的代码如下:

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:&#39;值不能为空。&#39;

专门针对该行:

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

知道为什么吗?

3 个答案:

答案 0 :(得分:1)

就像luxun所说,你必须定义环境变量。 为此打开cmd(在Windows上)并写下:

  

设置AZURE_AUTH_LOCATION

这将显示环境变量&#34; AZURE_AUTH_LOCATION&#34;。如果结果为&#34;环境变量AZURE_AUTH_LOCATION未定义&#34;或者如果路径错误,那么写在cmd:

  

SET AZURE_AUTH_LOCATION = PathOfTheAzureAuthLocationFile

这应该可以解决问题。

答案 1 :(得分:0)

$source = '\\server\share' $cred = Get-Credential $pss = New-PSSession -ComputerName "$computername" -Credential $cred Invoke-Command -Session $pss -ScriptBlock { Copy-Item "$source\FOLDER" -Destination 'C:\FOLDER' -Recurse -Force - Credential $cred 必须返回null。

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

定义一个变量,如:

Environment.GetEnvironmentVariable("AZURE_AUTH_LOCATION")

在VS中进行调试时,您应该可以通过右键单击并点击快速监视来检查位置值。

答案 2 :(得分:0)

非常感谢您的建议。 最后,错误是由于学校男孩在设置Env变量时的错误(相对路径包含我之前没有发现过的错误)。

我最终能够运行它。

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

感谢