小编Imr*_*vel的帖子

何时使用“静默”代码分析严重性?

分析器反馈严重性级别在文档中进行了解释。但在我看来 silentnone严重性级别似乎都有相同的含义 - “我不希望检查此规则”:

为了none

完全被压制了。

为了silent

对用户不可见。但是,诊断结果会报告给 IDE 诊断引擎。

VS2019“向IDE报告”到底有什么效果,在什么场景下应该更silent喜欢none

code-analysis visual-studio roslyn-code-analysis

18
推荐指数
3
解决办法
2741
查看次数

完整 .NET Framework 控制台应用程序中的 JSON 配置

我有一个面向 .NET 4.7.1 的控制台应用程序。我正在尝试在我的 .Net Framework 应用程序中使用 .net core 之类的配置。我的`App.config 是:

<configuration>
  <configSections>
    <section name="configBuilders" type="System.Configuration.ConfigurationBuildersSection, System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" restartOnExternalChanges="false" requirePermission="false" />
  </configSections>
  <configBuilders>
    <builders>
    <add name="SimpleJson"
         jsonFile="config.json"
         optional="false"
         jsonMode="Sectional"
         type="Microsoft.Configuration.ConfigurationBuilders.SimpleJsonConfigBuilder, Microsoft.Configuration.ConfigurationBuilders.Json, Version=1.0.0.0, Culture=neutral" /></builders>
  </configBuilders>
Run Code Online (Sandbox Code Playgroud)

我有一个文件config.json,其属性“始终复制”设置为True. config.json好像:

  {
  "appSettings": {
    "setting1": "value1",
    "setting2": "value2",
    "complex": {
      "setting1": "complex:value1",
      "setting2": "complex:value2"
    }
  },

  "connectionStrings": {
    "mySpecialConnectionString": "Dont_check_connection_information_into_source_control"
  }
}
Run Code Online (Sandbox Code Playgroud)

然后,在我的main方法中,我尝试读取一个配置值,如:

var config = ConfigurationManager.AppSettings
Run Code Online (Sandbox Code Playgroud)

但是,的值config始终为空。我尝试了以下方法:

  1. 尝试更改jsonFile~/config.json; …

.net c# configuration json asp-net-config-builders

10
推荐指数
2
解决办法
1万
查看次数

.NET 4.7 连接字符串格式的用户机密

我已经挖掘了几个小时并不断提出有关 .NET Core 的信息,但几乎没有关于 .NET 4.7 完整框架的任何信息。我想出了如何将 User Secrets 添加到我的 Web API 解决方案的主项目中。我得到了基本的 secrets.xml 文件,我需要在其中存储我的数据库用户名和密码或我的连接字符串。我找到的每篇文章都在讨论您需要对 web.config 进行的更改。然而,在secrets.xml 文件中没有显示如何处理我的连接字符串,如何格式化它。我可以创建一个名称/值对,但这似乎没有任何作用,我的应用程序无法连接到数据库。

我的 Web.config 中有这个:

  <configBuilders>
    <builders>
    <add name="Secrets" userSecretsId="5c65f7eb-a7e1-46cc-bff4-a526678005f2" type="Microsoft.Configuration.ConfigurationBuilders.UserSecretsConfigBuilder, Microsoft.Configuration.ConfigurationBuilders.UserSecrets, Version=1.0.0.0, Culture=neutral" /></builders>
  </configBuilders>

  <connectionStrings configBuilders="Secrets">
    <add name="ShopAPDbConnectionString" connectionString="" providerName="System.Data.SqlClient" />
  </connectionStrings>
Run Code Online (Sandbox Code Playgroud)

我的 secrets.xml 看起来像这样:

<?xml version="1.0" encoding="utf-8"?>
<root>
  <secrets ver="1.0">
    <secret name="ShopAPDbConnectionString" value="Server=SQLDEV01;Database=ShopAP; Integrated Security=True;" />
  </secrets>
</root>
Run Code Online (Sandbox Code Playgroud)

如何正确格式化并使其正常工作?

.net asp.net connection-string web-config asp-net-config-builders

9
推荐指数
2
解决办法
2447
查看次数

如何防止 Blob 容器被删除?

创建和删除 Blob 数据都很容易。有多种方法可以防止意外数据丢失,例如:

  • 资源锁可防止存储帐户被意外删除
  • Azure RBAC 用于限制对帐户/密钥的访问。
  • 软删除可从意外的 blob 删除中恢复。

这已经是一个很好的包了,但感觉还有一个薄弱环节。AFAIK,blob 容器缺乏帐户/blob 的安全性。

考虑到容器是用于 blob 枚举和批量删除的良好单位,但这很糟糕。

如何防止容器意外/恶意删除并降低数据丢失的风险?

我考虑过的..

想法1:将所有数据的副本同步到另一个存储帐户 - 但这会带来同步复杂性(增量副本?)和显着的成本增加。

想法 2:锁定密钥并迫使每个人都在仔细范围内的 SAS 密钥上工作,但这对于数十个 SAS 令牌及其续订来说很麻烦,+有时实际上需要并授权删除容器。感觉复杂到足以打破。无论如何,我更喜欢安全。

想法 3:以某种方式撤消删除?根据删除容器文档,容器数据不会立即消失:

删除容器操作将指定的容器标记为删除。该容器及其中包含的任何 blob 稍后都会在垃圾收集期间删除。

不过,没有关于存储帐户垃圾收集何时/如何工作,或者容器数据是否/如何/多长时间可以恢复的信息。

我错过了什么更好的选择吗?

backup azure azure-storage azure-blob-storage

6
推荐指数
1
解决办法
3892
查看次数

在子应用程序中阻止 web.config 继承

我们有一个遗留的 .NET 解决方案,它结合了 MVC 和 WebForms 的东西,以及一些 Web API 项目作为网站根目录下的应用程序。显然,这些 Web API 应用程序将继承网站的 web.config 设置。

我们还有另一个项目——一个有界上下文——用于 SSO 身份验证,它位于同一个根文件夹内,因此也继承了网站的 web.config 设置。这个有界上下文应用程序是用 .NET Core 构建的。

- wwwroot   // .NET Framework
    - API 1 // .NET Framework
    - API 2 // .NET Framework
    - ...
    - SSO / authentication // bounded context, built in .NET Core
Run Code Online (Sandbox Code Playgroud)

我们最近开始使用 Azure Key Vault 来存储我们的机密,为了在本地处理这些机密,我们使用了 secrets.xml 文件。所以根网站的 web.config 看起来像这样......

<configSections>
  <section name="configBuilders" ... />
</configSections>  

<configBuilders>
  <builders>
    <add name="Secrets" optional="false" userSecretsFile="~\secrets.xml" [elided attributes] />
  </builders>
</configBuilders>

<appSettings …
Run Code Online (Sandbox Code Playgroud)

c# web-config subapplication secretsmanager asp-net-config-builders

6
推荐指数
1
解决办法
169
查看次数

Azure 存储帐户拒绝托管服务标识的颁发者

我正在使用适用于 .NET 的 Microsoft.Azure.Services.AppAuthentication 库 (v1.0.3),使用托管服务标识从 Azure Function 应用连接到 Blob 存储。授权码:

var tokenProvider = new AzureServiceTokenProvider();
string accessToken = await tokenProvider.GetAccessTokenAsync("https://storage.azure.com/");
var tokenCredential = new TokenCredential(accessToken);
var credentials = new StorageCredentials(tokenCredential);
var storageUri = new Uri($"https://{accountName}.blob.core.windows.net");
var client = new CloudBlobClient(storageUri, credentials);
Run Code Online (Sandbox Code Playgroud)

无论给定的 RBAC 角色如何,现有存储帐户都拒绝接受 MSI:

Microsoft.WindowsAzure.Storage.StorageException: Server failed to authenticate the request.
Make sure the value of Authorization header is formed correctly including the signature.
   at Microsoft.WindowsAzure.Storage.Core.Executor.Executor.ExecuteAsyncInternal[T](RESTCommand`1 cmd, IRetryPolicy policy, OperationContext operationContext, CancellationToken token)
   at Microsoft.WindowsAzure.Storage.Blob.CloudBlobContainer.CreateIfNotExistsAsync(BlobContainerPublicAccessType accessType, …
Run Code Online (Sandbox Code Playgroud)

azure azure-active-directory azure-blob-storage azure-functions azure-managed-identity

5
推荐指数
1
解决办法
4728
查看次数

何时创建和分发“参考程序集”?

C# 7.1引入了一些新的命令行参数来帮助创建“参考程序集”。通过文档,它输出一个程序集,其中:

将它们的方法体替换为单个 throw null 体,但包括除匿名类型之外的所有成员。

我发现了一个有趣的注释,它在变化时更加稳定

这意味着它的更改频率低于完整的程序集——许多常见的开发活动不会更改接口,只会更改实现。这意味着增量构建可以更快 - ...

对于罗斯林本身来说可能是必要的..

我们将介绍第二个概念,即“参考组件”(也称为骨架组件)。[---]它们将用于构建场景。

.. 无论这些“构建场景”对于罗斯林来说是什么。

据我所知,对于普通的 .NET 程序集用户来说,此类程序集可能更小,并且加载反射的速度稍快。好的但是:

  • 通常您还关心执行,并且实现程序集已经包含参考程序集的所有数据,
  • 通常你并不关心加载时的微小性能差异,
  • 最重要的是 - 通常您根本没有可用(分布式)的精简参考程序集。

它的用处似乎相当小众。

因此,我想知道通用程序集生成器方面的事情 - 什么时候应该考虑显式使用这些新的编译器标志来创建引用程序集?除了罗斯林本身之外,它还有任何实际用途吗?

c# .net-assembly roslyn c#-7.1

4
推荐指数
1
解决办法
1645
查看次数

if 语句的 CosmosDB SQL 查询语法

我试图找到在 Azure ComsmosDB SQL 查询中执行 If/Case 类型语句的正确语法。这是我拥有的文件

{
"CurrentStage": "Stage2",
"Stage1": {
    "Title": "Stage 1"
},
"Stage2": {
    "Title": "Stage 2"
},
"Stage3": {
    "Title": "Stage 3"
}
Run Code Online (Sandbox Code Playgroud)

}

我想要做的是创建一个看起来像的查询

        Select c.CurrentStage, 
if (CurrentStage == 'Stage1') { c.Stage1.Title } 
else if (CurrentStage == 'Stage2') { c.Stage2.Title } 
else if (CurrentStage == 'Stage3') { c.Stage3.Title } as Title
    From c
Run Code Online (Sandbox Code Playgroud)

显然,我拥有的文档和查询比这个复杂得多,但这让您对我正在尝试做的事情有了大致的了解。根据文档中的其他一些字段,我在选择中有 1 个字段是可变的。

azure-cosmosdb azure-cosmosdb-sqlapi

4
推荐指数
1
解决办法
3822
查看次数

更改 C# 应用程序中的“(默认)”ResX 语言

我正在用 C# 制作一个应用程序,其中包含很多表单和其他内容。我想本地化它,所以我使用了VS中集成的本地化功能。该应用程序最初是法语(因为我是),带有英语翻译 RESXes,但现在它与其他一些不会说法语的开发人员一起出现在 Codeplex 上,我想更改应用程序和 RESX 文件中的“默认”语言这样他们就可以在不阅读法语的情况下翻译成其他语言。因为当您在 VS Form Designer 中选择另一种语言时,它会显示默认语言(此处为法语)。我尝试重命名所有文件,但问题是所有表单属性都存储在默认的 RESX(法语)中,因此如果我重命名,它将破坏所有内容。是否可以将默认语言更改为英语?

编辑:我认为我需要更精确。该应用程序最初是法语的。然后我将其本地化为英语。现在有一个包含表单属性+原始法语本地化的 MainWindow.resx 和一个仅包含英语本地化的 MainWindow.en-US.resx。因此,如果在设计器中,在“语言”中我选择“(默认)”,它会向我显示 MainWindow.resx 法语,如果我想翻译,它会向我显示法语文本。为了让其他开发人员更容易翻译,我想将 MainWindow.resx 进行英语本地化并创建一个单独的 MainWindow.fr-FR.resx。我还尝试更改AssemblyInfo.cs中的“中性语言”,但没有效果。

.net c# localization resx

3
推荐指数
1
解决办法
1万
查看次数

配置生成器未找到环境变量

当我在调试时查看连接字符串时,值为“abc”;不是我设置的 Windows 环境变量。

网络配置

<configSections>
  <section name="configBuilders" type="System.Configuration.ConfigurationBuildersSection, System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" restartOnExternalChanges="false" requirePermission="false" />
</configSections>

<configBuilders>
   <builders>
      <add name="Environment" type="Microsoft.Configuration.ConfigurationBuilders.EnvironmentConfigBuilder, Microsoft.Configuration.ConfigurationBuilders.Environment, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
   </builders>
</configBuilders>

<connectionStrings configBuilders="Environment">
   <add name="myConnection" connectionString="abc" providerName="System.Data.SqlClient"/
</connectionStrings>
Run Code Online (Sandbox Code Playgroud)

我仔细检查了是否安装了正确的 Nuget 包、框架在 4.7.2 上是否正确、我的拼写是否正确,并且我已多次阅读有关配置生成器的Microsoft 文档。

.net windows asp.net visual-studio asp-net-config-builders

1
推荐指数
1
解决办法
2089
查看次数