Azure.ResourceManager 1.12.0
ID前缀已保留
dotnet add package Azure.ResourceManager --version 1.12.0
NuGet\Install-Package Azure.ResourceManager -Version 1.12.0
<PackageReference Include="Azure.ResourceManager" Version="1.12.0" />
paket add Azure.ResourceManager --version 1.12.0
#r "nuget: Azure.ResourceManager, 1.12.0"
// Install Azure.ResourceManager as a Cake Addin #addin nuget:?package=Azure.ResourceManager&version=1.12.0 // Install Azure.ResourceManager as a Cake Tool #tool nuget:?package=Azure.ResourceManager&version=1.12.0
Microsoft Azure 资源管理器 .NET 客户端库
Microsoft Azure 资源管理器是 Azure 的部署和管理服务。它提供了一个管理层,使您能够创建、更新和删除 Azure 帐户中的资源。
此库为 Microsoft Azure 提供资源组和资源管理功能。
此库遵循 新的 Azure SDK 指南,并提供了许多核心功能
- Support MSAL.NET, Azure.Identity is out of box for supporting MSAL.NET.
- Support [OpenTelemetry](https://opentelemetry.io/) for distributed tracing.
- HTTP pipeline with custom policies.
- Better error-handling.
- Support uniform telemetry across all languages.
入门
安装包
使用 NuGet 安装 .NET Azure 资源管理核心库
dotnet add package Azure.ResourceManager
先决条件
您必须拥有一个 Microsoft Azure 订阅。
设置一种使用 Azure Identity 验证 Azure 的方法。
一些选项包括
- 通过 Azure CLI 登录。
- 通过Visual Studio来访问。
- 设置环境变量。
关于使用Azure Identity进行不同认证方式的信息可以在此文档中找到。
认证客户端
创建已认证客户端的默认选项是使用DefaultAzureCredential
。由于所有管理API都通过相同的端点,为了与资源交互,仅需要创建一个顶级的ArmClient
。
要认证到Azure并创建一个ArmClient
,请执行以下代码
using System;
using System.Threading.Tasks;
using Azure.Core;
using Azure.Identity;
using Azure.ResourceManager.Compute;
using Azure.ResourceManager.Resources;
ArmClient client = new ArmClient(new DefaultAzureCredential());
关于Azure.Identity.DefaultAzureCredential
类的更多文档可以在此文档中找到。
关键概念
理解Azure资源层次结构
为了减少执行常见任务所需客户端的数量,以及每个客户端所需重复参数的数量,我们在SDK中引入了一个对象层次结构,该层次结构与Azure中的对象层次结构相似。SDK中的每个资源客户端都有方法来访问其子资源客户端的资源客户端,这些子资源客户端已经针对适当的订阅和资源组进行了范围限定。
为了实现这一目标,我们为Azure中所有资源引入了三种标准类型
[Resource]Resource.cs
此类表示一个完整的资源客户端对象,它包含一个用于暴露详细信息的Data
属性,为一个[Resource]Data
类型。它还可以访问该资源的所有操作,而无需传递范围参数,如订阅ID或资源名称。此资源类使得在列表调用结果上直接执行操作变得方便,因为现在所有返回的内容都是一个完整的资源客户端。
ArmClient client = new ArmClient(new DefaultAzureCredential());
string resourceGroupName = "myResourceGroup";
SubscriptionResource subscription = await client.GetDefaultSubscriptionAsync();
ResourceGroupCollection resourceGroups = subscription.GetResourceGroups();
ResourceGroupResource resourceGroup = await resourceGroups.GetAsync(resourceGroupName);
await foreach (VirtualMachineResource virtualMachine in resourceGroup.GetVirtualMachines())
{
//previously we would have to take the resourceGroupName and the vmName from the vm object
//and pass those into the powerOff method as well as we would need to execute that on a separate compute client
await virtualMachine.PowerOffAsync(WaitUntil.Completed);
}
[Resource]Data.cs
此类表示构成特定资源的模型。通常,此类是服务调用(如HTTP GET)的响应数据,提供了底层资源的详细信息。以前,此类由一个Model
类表示。
[Resource]Collection.cs
此类表示可以在属于特定父资源的资源集合上执行的操作。此类提供了大部分逻辑集合操作。
集合行为 | 集合方法 |
---|---|
迭代/列表 | GetAll() |
索引 | Get(string name) |
添加 | CreateOrUpdate(string name, [Resource]Data data) |
包含 | Exists(string name) |
对于大多数情况,父元素将是ResourceGroup
。例如,Subnet
是VirtualNetwork
的子级,而ResourceGroup
是Subscription
的子级。
整合一切
想象一下,我们的公司要求所有虚拟机都必须标记所有者。我们负责编写一个程序,将标签添加到给定资源组中任何缺少的虚拟机上。
// First we construct our client
ArmClient client = new ArmClient(new DefaultAzureCredential());
// Next we get a resource group object
// ResourceGroupResource is a [Resource] object from above
SubscriptionResource subscription = await client.GetDefaultSubscriptionAsync();
ResourceGroupCollection resourceGroups = subscription.GetResourceGroups();
ResourceGroupResource resourceGroup = await resourceGroups.GetAsync("myRgName");
// Next we get the collection for the virtual machines
// vmCollection is a [Resource]Collection object from above
VirtualMachineCollection virtualMachines = resourceGroup.GetVirtualMachines();
// Next we loop over all vms in the collection
// Each vm is a [Resource] object from above
await foreach (VirtualMachineResource virtualMachine in virtualMachines)
{
// We access the [Resource]Data properties from vm.Data
if (!virtualMachine.Data.Tags.ContainsKey("owner"))
{
// We can also access all operations from vm since it is already scoped for us
await virtualMachine.AddTagAsync("owner", "tagValue");
}
}
结构化资源标识符
资源ID包含有关资源本身的有用信息,但它们是必须解析的普通字符串。您不必实现自己的解析逻辑;您可以使用一个将为您执行解析的ResourceIdentifier
对象:new ResourceIdentifier("myid");
。
示例:使用资源标识符对象解析ID
ResourceIdentifier id = new ResourceIdentifier("/subscriptions/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee/resourceGroups/workshop2021-rg/providers/Microsoft.Network/virtualNetworks/myVnet/subnets/mySubnet");
Console.WriteLine($"Subscription: {id.SubscriptionId}");
Console.WriteLine($"ResourceGroupResource: {id.ResourceGroupName}");
Console.WriteLine($"Vnet: {id.Parent.Name}");
Console.WriteLine($"Subnet: {id.Name}");
通过资源标识符管理现有资源
在使用管理客户端库时,对已存在的资源进行操作是一个常见的用例。在这种情况下,您通常会以字符串的形式拥有您想要工作的资源的标识符。虽然新的对象层次结构非常适合提供程序,并且适合在给定的父范围内工作,但它在这种情况下并不是最有效的。
以下是如何访问 AvailabilitySet
对象并直接使用其 ID 进行管理的示例:
ResourceIdentifier id = new ResourceIdentifier("/subscriptions/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee/resourceGroups/workshop2021-rg/providers/Microsoft.Compute/availabilitySets/ws2021availSet");
// We construct a new client to work with
ArmClient client = new ArmClient(new DefaultAzureCredential());
// Next we get the collection of subscriptions
SubscriptionCollection subscriptions = client.GetSubscriptions();
// Next we get the specific subscription this resource belongs to
SubscriptionResource subscription = await subscriptions.GetAsync(id.SubscriptionId);
// Next we get the collection of resource groups that belong to that subscription
ResourceGroupCollection resourceGroups = subscription.GetResourceGroups();
// Next we get the specific resource group this resource belongs to
ResourceGroupResource resourceGroup = await resourceGroups.GetAsync(id.ResourceGroupName);
// Next we get the collection of availability sets that belong to that resource group
AvailabilitySetCollection availabilitySets = resourceGroup.GetAvailabilitySets();
// Finally we get the resource itself
// Note: for this last step in this example, Azure.ResourceManager.Compute is needed
AvailabilitySetResource availabilitySet = await availabilitySets.GetAsync(id.Name);
此方法需要编写大量代码并对 Azure 进行三次 API 调用。现在,您可以通过客户端提供的扩展方法以更少的代码和没有任何 API 调用来完成相同的事情。这些扩展方法允许您传入资源标识符并检索一个有作用域的资源客户端。返回的对象是上面提到的 [Resource],因为它还没有向 Azure 获取数据,所以 Data 属性将为 null。
因此,前面的例子将看起来像这样:
ResourceIdentifier resourceId = new ResourceIdentifier("/subscriptions/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee/resourceGroups/workshop2021-rg/providers/Microsoft.Compute/availabilitySets/ws2021availSet");
// We construct a new client to work with
ArmClient client = new ArmClient(new DefaultAzureCredential());
// Next we get the AvailabilitySetResource resource client from the client
// The method takes in a ResourceIdentifier but we can use the implicit cast from string
AvailabilitySetResource availabilitySet = client.GetAvailabilitySetResource(resourceId);
// At this point availabilitySet.Data will be null and trying to access it will throw
// If we want to retrieve the objects data we can simply call get
availabilitySet = await availabilitySet.GetAsync();
// we now have the data representing the availabilitySet
Console.WriteLine(availabilitySet.Data.Name);
我们还提供了一个选项,如果您只知道 ResourceIdentifier
的组成部分,每个资源都提供了一个静态方法,可以从这些部分构建完整的字符串。上面的例子将变成这样。
string subscriptionId = "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee";
string resourceGroupName = "workshop2021-rg";
string availabilitySetName = "ws2021availSet";
ResourceIdentifier resourceId = AvailabilitySetResource.CreateResourceIdentifier(subscriptionId, resourceGroupName, availabilitySetName);
// We construct a new client to work with
ArmClient client = new ArmClient(new DefaultAzureCredential());
// Next we get the AvailabilitySetResource resource client from the client
// The method takes in a ResourceIdentifier but we can use the implicit cast from string
AvailabilitySetResource availabilitySet = client.GetAvailabilitySetResource(resourceId);
// At this point availabilitySet.Data will be null and trying to access it will throw
// If we want to retrieve the objects data we can simply call get
availabilitySet = await availabilitySet.GetAsync();
// we now have the data representing the availabilitySet
Console.WriteLine(availabilitySet.Data.Name);
检查 [Resource] 是否存在
如果您不确定您想要获取的资源是否存在,或者您只想检查它是否存在,您可以使用 Exists()
方法,该方法的调用可以从任何 [Resource]Collection 类中发起。
Exists()
和 ExistsAsync()
返回 Response<bool>
,其中当指定的资源不存在时,bool 将为 false。这两个方法仍然为您的底层原始响应提供访问。
在引入这些方法之前,您需要捕获 RequestFailedException
并检查状态码是否为 404。
ArmClient client = new ArmClient(new DefaultAzureCredential());
SubscriptionResource subscription = await client.GetDefaultSubscriptionAsync();
ResourceGroupCollection resourceGroups = subscription.GetResourceGroups();
string resourceGroupName = "myRgName";
try
{
ResourceGroupResource resourceGroup = await resourceGroups.GetAsync(resourceGroupName);
// At this point, we are sure that myRG is a not null Resource Group, so we can use this object to perform any operations we want.
}
catch (RequestFailedException ex) when (ex.Status == 404)
{
Console.WriteLine($"Resource Group {resourceGroupName} does not exist.");
}
现在,有了这些便利方法,我们可以做如下操作:
ArmClient client = new ArmClient(new DefaultAzureCredential());
SubscriptionResource subscription = await client.GetDefaultSubscriptionAsync();
ResourceGroupCollection resourceGroups = subscription.GetResourceGroups();
string resourceGroupName = "myRgName";
bool exists = await resourceGroups.ExistsAsync(resourceGroupName);
if (exists)
{
Console.WriteLine($"Resource Group {resourceGroupName} exists.");
// We can get the resource group now that we know it exists.
// This does introduce a small race condition where resource group could have been deleted between the check and the get.
ResourceGroupResource resourceGroup = await resourceGroups.GetAsync(resourceGroupName);
}
else
{
Console.WriteLine($"Resource Group {resourceGroupName} does not exist.");
}
示例
创建资源组
// First, initialize the ArmClient and get the default subscription
ArmClient client = new ArmClient(new DefaultAzureCredential());
// Now we get a ResourceGroupResource collection for that subscription
SubscriptionResource subscription = await client.GetDefaultSubscriptionAsync();
ResourceGroupCollection resourceGroups = subscription.GetResourceGroups();
// With the collection, we can create a new resource group with an specific name
string resourceGroupName = "myRgName";
AzureLocation location = AzureLocation.WestUS2;
ResourceGroupData resourceGroupData = new ResourceGroupData(location);
ArmOperation<ResourceGroupResource> operation = await resourceGroups.CreateOrUpdateAsync(WaitUntil.Completed, resourceGroupName, resourceGroupData);
ResourceGroupResource resourceGroup = operation.Value;
列出所有资源组
// First, initialize the ArmClient and get the default subscription
ArmClient client = new ArmClient(new DefaultAzureCredential());
SubscriptionResource subscription = await client.GetDefaultSubscriptionAsync();
// Now we get a ResourceGroupResource collection for that subscription
ResourceGroupCollection resourceGroups = subscription.GetResourceGroups();
// We can then iterate over this collection to get the resources in the collection
await foreach (ResourceGroupResource resourceGroup in resourceGroups)
{
Console.WriteLine(resourceGroup.Data.Name);
}
更新资源组
// Note: Resource group named 'myRgName' should exist for this example to work.
ArmClient client = new ArmClient(new DefaultAzureCredential());
SubscriptionResource subscription = await client.GetDefaultSubscriptionAsync();
ResourceGroupCollection resourceGroups = subscription.GetResourceGroups();
string resourceGroupName = "myRgName";
ResourceGroupResource resourceGroup = await resourceGroups.GetAsync(resourceGroupName);
resourceGroup = await resourceGroup.AddTagAsync("key", "value");
删除资源组
ArmClient client = new ArmClient(new DefaultAzureCredential());
SubscriptionResource subscription = await client.GetDefaultSubscriptionAsync();
ResourceGroupCollection resourceGroups = subscription.GetResourceGroups();
string resourceGroupName = "myRgName";
ResourceGroupResource resourceGroup = await resourceGroups.GetAsync(resourceGroupName);
await resourceGroup.DeleteAsync(WaitUntil.Completed);
获取通用资源列表
ArmClient client = new ArmClient(new DefaultAzureCredential());
SubscriptionResource sub = client.GetDefaultSubscription();
AsyncPageable<GenericResource> networkAndVmWithTestInName = sub.GetGenericResourcesAsync(
// Set filter to only return virtual network and virtual machine resource with 'test' in the name
filter: "(resourceType eq 'Microsoft.Network/virtualNetworks' or resourceType eq 'Microsoft.Compute/virtualMachines') and substringof('test', name)",
// Include 'createdTime' and 'changeTime' properties in the returned data
expand: "createdTime,changedTime"
);
int count = 0;
await foreach (var res in networkAndVmWithTestInName)
{
Console.WriteLine($"{res.Id.Name} in resource group {res.Id.ResourceGroupName} created at {res.Data.CreatedOn} and changed at {res.Data.ChangedOn}");
count++;
}
Console.WriteLine($"{count} resources found");
创建通用资源
ArmClient client = new ArmClient(new DefaultAzureCredential());
var subnetName = "samplesubnet";
var addressSpaces = new Dictionary<string, object>()
{
{ "addressPrefixes", new List<string>() { "10.0.0.0/16" } }
};
var subnet = new Dictionary<string, object>()
{
{ "name", subnetName },
{ "properties", new Dictionary<string, object>()
{
{ "addressPrefix", "10.0.1.0/24" }
}
}
};
var subnets = new List<object>() { subnet };
var data = new GenericResourceData(AzureLocation.EastUS)
{
Properties = BinaryData.FromObjectAsJson(new Dictionary<string, object>()
{
{ "addressSpace", addressSpaces },
{ "subnets", subnets }
})
};
ResourceIdentifier id = new ResourceIdentifier("/subscriptions/{subscription_id}/resourceGroups/{resourcegroup_name}/providers/Microsoft.Network/virtualNetworks/{vnet_name}");
var createResult = await client.GetGenericResources().CreateOrUpdateAsync(WaitUntil.Completed, id, data);
Console.WriteLine($"Resource {createResult.Value.Id.Name} in resource group {createResult.Value.Id.ResourceGroupName} created");
更新通用资源
ArmClient client = new ArmClient(new DefaultAzureCredential());
var subnetName = "samplesubnet";
var addressSpaces = new Dictionary<string, object>()
{
{ "addressPrefixes", new List<string>() { "10.0.0.0/16" } }
};
var subnet = new Dictionary<string, object>()
{
{ "name", subnetName },
{ "properties", new Dictionary<string, object>()
{
{ "addressPrefix", "10.0.1.0/24" }
}
}
};
var subnets = new List<object>() { subnet };
var data = new GenericResourceData(AzureLocation.EastUS)
{
Properties = BinaryData.FromObjectAsJson(new Dictionary<string, object>()
{
{ "addressSpace", addressSpaces },
{ "subnets", subnets }
})
};
ResourceIdentifier id = new ResourceIdentifier("/subscriptions/{subscription_id}/resourceGroups/{resourcegroup_name}/providers/Microsoft.Network/virtualNetworks/{vnet_name}");
var createResult = await client.GetGenericResources().CreateOrUpdateAsync(WaitUntil.Completed, id, data);
Console.WriteLine($"Resource {createResult.Value.Id.Name} in resource group {createResult.Value.Id.ResourceGroupName} updated");
更新通用资源标记
ArmClient client = new ArmClient(new DefaultAzureCredential());
ResourceIdentifier id = new ResourceIdentifier("/subscriptions/{subscription_id}/resourceGroups/{resourcegroup_name}/providers/Microsoft.Network/virtualNetworks/{vnet_name}");
GenericResource resource = client.GetGenericResources().Get(id).Value;
GenericResourceData updateTag = new GenericResourceData(AzureLocation.EastUS);
updateTag.Tags.Add("tag1", "sample-for-genericresource");
ArmOperation<GenericResource> updateTagResult = await resource.UpdateAsync(WaitUntil.Completed, updateTag);
Console.WriteLine($"Resource {updateTagResult.Value.Id.Name} in resource group {updateTagResult.Value.Id.ResourceGroupName} updated");
获取通用资源
ArmClient client = new ArmClient(new DefaultAzureCredential());
ResourceIdentifier id = new ResourceIdentifier("/subscriptions/{subscription_id}/resourceGroups/{resourcegroup_name}/providers/Microsoft.Network/virtualNetworks/{vnet_name}");
Response<GenericResource> getResultFromGenericResourceCollection = await client.GetGenericResources().GetAsync(id);
Console.WriteLine($"Resource {getResultFromGenericResourceCollection.Value.Id.Name} in resource group {getResultFromGenericResourceCollection.Value.Id.ResourceGroupName} got");
GenericResource resource = getResultFromGenericResourceCollection.Value;
Response<GenericResource> getResultFromGenericResource = await resource.GetAsync();
Console.WriteLine($"Resource {getResultFromGenericResource.Value.Id.Name} in resource group {getResultFromGenericResource.Value.Id.ResourceGroupName} got");
检查通用资源是否存在
ArmClient client = new ArmClient(new DefaultAzureCredential());
ResourceIdentifier id = new ResourceIdentifier("/subscriptions/{subscription_id}/resourceGroups/{resourcegroup_name}/providers/Microsoft.Network/virtualNetworks/{vnet_name}");
bool existResult = await client.GetGenericResources().ExistsAsync(id);
Console.WriteLine($"Resource exists: {existResult}");
删除通用资源
ArmClient client = new ArmClient(new DefaultAzureCredential());
ResourceIdentifier id = new ResourceIdentifier("/subscriptions/{subscription_id}/resourceGroups/{resourcegroup_name}/providers/Microsoft.Network/virtualNetworks/{vnet_name}");
GenericResource resource = client.GetGenericResources().Get(id).Value;
var deleteResult = await resource.DeleteAsync(WaitUntil.Completed);
Console.WriteLine($"Resource deletion response status code: {deleteResult.WaitForCompletionResponse().Status}");
重新启动长时间运行的操作
ArmClient client = new ArmClient(new DefaultAzureCredential());
SubscriptionResource subscription = await client.GetDefaultSubscriptionAsync();
ResourceGroupCollection resourceGroups = subscription.GetResourceGroups();
var orgData = new ResourceGroupData(AzureLocation.WestUS2);
// We initialize a long-running operation
var rgOp = await resourceGroups.CreateOrUpdateAsync(WaitUntil.Started, "orgName", orgData);
// We get the rehydration token from the operation
var rgOpRehydrationToken = rgOp.GetRehydrationToken();
// We rehydrate the long-running operation with the rehydration token, we can also do this asynchronously
var rehydratedOrgOperation = ArmOperation.Rehydrate<ResourceGroupResource>(client, rgOpRehydrationToken!.Value);
var rehydratedOrgOperationAsync = await ArmOperation.RehydrateAsync<ResourceGroupResource>(client, rgOpRehydrationToken!.Value);
// Now we can operate with the rehydrated operation
var rawResponse = rehydratedOrgOperation.GetRawResponse();
await rehydratedOrgOperation.WaitForCompletionAsync();
有关更详细的示例,请参阅我们提供的 示例。
Azure 资源管理器测试
要运行测试: dotnet test
要运行测试并进行代码覆盖率报告和自动生成 HTML 报告: dotnet test /p:CollectCoverage=true /p:CoverletOutputFormat=cobertura
覆盖率报告将放置在您的路径中相对于 azure-proto-core-test 的 /coverage
目录,并按 HTML 格式查看。
您还可以使用适当的查看器插件在 VS 或 VsCode 中查看报告。
在运行时,您还可以在命令行上显示简短的报告。
使用单个文件或测试运行测试
要使用代码覆盖率并自动生成 HTML 报告运行单个测试:dotnet test /p:CollectCoverage=true /p:CoverletOutputFormat=cobertura --filter <test-to-run>
故障排除
- 通过 GitHub Issues 提交问题。
- 检查 以前的问题 或使用 Azure 和 .NET 标签在 Stack Overflow 上提问。
下一步
更多示例代码
其他文档
如果您正在从旧的 SDK 迁移,请查阅此 迁移指南。
有关 Microsoft Azure SDK 的更多信息,请参阅 此网站。
贡献
有关贡献此存储库的详细信息,请参阅 贡献指南。
本项目欢迎贡献和建议。大多数贡献需要您同意一份贡献者许可协议(CLA),声明您有权并且实际上已经授予我们使用您贡献的权利。有关详情,请访问https://cla.microsoft.com。
当您提交一个拉取请求时,CLA机器人将自动确定您是否需要提供CLA,并相应地标记PR(例如,标签、评论)。遵循机器人的指示。您只需要在整个使用我们的CLA的仓库中执行此操作一次。
本项目已采用Microsoft开源代码行为准则。更多信息,请参考代码行为准则常见问题解答或通过[email protected]联系我们有任何其他问题或意见。
产品 | 版本 兼容和额外的计算目标框架版本。 |
---|---|
.NET | |
.NET Core | netcoreapp2.0 已计算。 netcoreapp2.1 已计算。 netcoreapp2.2 已计算。 netcoreapp3.0 已计算。 netcoreapp3.1 已计算。 |
.NET Standard | netstandard2.0 兼容。 netstandard2.1 已计算。 |
.NET Framework | net461 已计算。 net462 已计算。 net463 已计算。 net47 已计算。 net471 已计算。 net472 已计算。 net48 已计算。 net481 已计算。 |
MonoAndroid | monoandroid 已计算。 |
MonoMac | monomac 已计算。 |
MonoTouch | monotouch 已计算。 |
Tizen | tizen40 已计算。 tizen60 已计算。 |
Xamarin.iOS | xamarinios 已计算。 |
Xamarin.Mac | xamarinmac 已计算。 |
Xamarin.TVOS | xamarintvos 已计算。 |
Xamarin.WatchOS | xamarinwatchos 已计算。 |
-
.NETStandard 2.0
- Azure.Core (>= 1.39.0)
- System.ClientModel (>= 1.0.0)
- System.Text.Json (>= 4.7.2)
NuGet 包 (199)
显示依赖于 Azure.ResourceManager 的前 5 个 NuGet 包
包 | 下载 |
---|---|
Azure.ResourceManager.Storage Microsoft Azure 管理客户端 SDK,用于 Azure 资源提供者 Microsoft.Storage。 |
|
Azure.ResourceManager.Resources Microsoft Azure 资源管理器客户端 SDK,用于 Azure 资源提供者 Resources。 |
|
Azure.ResourceManager.Network Microsoft Azure 管理客户端 SDK,用于 Azure 资源提供者 Microsoft.Network。 |
|
Azure.ResourceManager.Compute Microsoft Azure 管理客户端 SDK,用于 Azure 资源提供者 Microsoft.Compute。 |
|
Azure.ResourceManager.KeyVault Microsoft Azure 管理客户端 SDK,用于 Azure 资源提供者 Microsoft.KeyVault。 |
GitHub 仓库 (11)
展示依赖 Azure.ResourceManager 的最流行的 5 个 GitHub 仓库
仓库 | 星标 |
---|---|
elsa-workflows/elsa-core
.NET 工作流库
|
|
Azure/azure-sdk-for-net
此仓库是 .NET Azure SDK 的积极开发仓库。对于 SDK 的消费者,我们建议您访问我们的公共开发人员文档 https://learn.microsoft.com/dotnet/azure/ 或我们的版本化开发人员文档 https://azure.github.io/azure-sdk-for-net。
|
|
win-acme/win-acme
用于 Windows 的简单 ACME 客户端(用于与 Let's Encrypt 等合作)
|
|
microsoft/onefuzz
自托管的模糊测试即服务平台
|
|
Azure/Industrial-IoT
Azure 工业物联网平台
|
版本 | 下载 | 最后更新 |
---|---|---|
1.12.0 | 478,371 | 5/7/2024 |
1.12.0-beta.1 | 3,297 | 3/23/2024 |
1.11.1 | 442,839 | 4/23/2024 |
1.11.0 | 616,457 | 3/22/2024 |
1.11.0-beta.1 | 2,382 | 1/12/2024 |
1.10.2 | 187,432 | 3/1/2024 |
1.10.1 | 266,583 | 1/26/2024 |
1.10.0 | 260,034 | 1/11/2024 |
1.9.0 | 1,516,257 | 11/16/2023 |
1.8.0 | 68,345 | 11/1/2023 |
1.8.0-beta.1 | 12,474 | 8/10/2023 |
1.7.0 | 934,819 | 7/13/2023 |
1.6.0 | 967,881 | 5/16/2023 |
1.5.0 | 74,591 | 4/27/2023 |
1.4.0 | 2,899,511 | 2/10/2023 |
1.3.2 | 1,138,835 | 11/11/2022 |
1.3.1 | 1,150,886 | 8/18/2022 |
1.3.0 | 420,580 | 8/9/2022 |
1.2.1 | 19,029 | 7/26/2022 |
1.2.0 | 1,143,963 | 7/11/2022 |
1.1.2 | 16,604 | 7/1/2022 |
1.1.1 | 23,311 | 6/23/2022 |
1.1.0 | 38,282 | 6/8/2022 |
1.0.0 | 247,634 | 4/7/2022 |
1.0.0-beta.9 | 5,574 | 3/31/2022 |
1.0.0-beta.8 | 67,524 | 1/29/2022 |
1.0.0-beta.7 | 83,877 | 12/24/2021 |
1.0.0-beta.6 | 294,562 | 12/1/2021 |
1.0.0-beta.5 | 62,052 | 10/28/2021 |
1.0.0-beta.4 | 12,292 | 9/28/2021 |
1.0.0-beta.3 | 68,025 | 9/8/2021 |
1.0.0-beta.2 | 14,927 | 8/31/2021 |
1.0.0-beta.1 | 6,535 | 8/26/2021 |