小编And*_*ges的帖子

IEnumerable - 更新foreach循环内的对象

我有一个非常简单的程序,它创建了一堆对象并迭代它们来设置每个对象的Priority属性.

static void Main(string[] args)
{
    foreach (var obj in ObjectCreator.CreateObjectsWithPriorities())
        Console.WriteLine(String.Format("Object #{0} has priority {1}",
                                         obj.Id, obj.Priority));
}

class ObjectCreator
{
    public static IEnumerable<ObjectWithPriority> CreateObjectsWithPriorities()
    {
        var objs = new[] { 1, 2, 3 }.Select(i => new ObjectWithPriority() { Id = i });
        ApplyPriorities(objs);
        return objs;
    }

    static void ApplyPriorities(IEnumerable<ObjectWithPriority> objs)
    {
        foreach (var obj in objs)
        {
            obj.Priority = obj.Id * 10;
            Console.WriteLine(String.Format("Set priority of object #{0} to {1}", obj.Id, obj.Priority));
        }
    }
}

class ObjectWithPriority …
Run Code Online (Sandbox Code Playgroud)

c# ienumerable foreach

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

如何在C#源代码中检测非ascii字符

我有一个非常愚蠢但很难的问题.我正在处理一些非常糟糕的C#遗留代码,它们在类和方法名称中有许多非ASCII字符,当对象被序列化为字符串并通过http/tcp /发送时会导致很多问题......我正在寻找一种方法来扫描C#代码并检测类/方法/属性/枚举/ ...的名称中的所有非ASCII字符,但不是在字符串文字或注释或其他任何非C#代码中:

public enum Languages
{
    /// <summary>
    /// English
    /// </summary>
    English = 1,

    /// <summary>
    /// ?eská         <- acceptable
    /// </summary>
    ?eská = 2,     // <- not acceptable
}

Logger.Info("Selectes language: ?eská"); // <- acceptable
Run Code Online (Sandbox Code Playgroud)

任何实现这一目标的方法都有所帮助:无论是程序化还是使用任何类型的工具.

编辑:正如评论中的许多人建议我应该修复序列化而不是清除非ACII字符,我想澄清为什么这不是一个选项.某些类/方法名称中包含ASCII和非ASCII字符.例如,My?lass看起来像一个完美有效的英文名称,但实际上它?在中间有一个俄文字母,这显然是一个错误使开发人员忘记改变他们的输入语言.我想摆脱代码中的这些错误.

c#

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

将 Azure 证书移动到另一个订阅时出错:路径“properties.keyVaultId”处的属性 id“”无效

我正在尝试通过 Azure 门户将我的 Azure AppService 和所有墨迹资源移动到另一个订阅。我正在执行以下步骤:

  1. 转到我的AppService的资源组
  2. 选择此资源组中的所有资源:AppService、AppService 计划、AppService 域、DNS 区域、SSL 证书
  3. 然后点击“移动”->“移至另一个订阅”
  4. 选择目标订阅和资源组,然后单击“下一步”
  5. 等待验证完成,并看到链接到 SSL 证书资源的以下错误(屏幕截图):
Property id '' at path 'properties.keyVaultId' is invalid
Run Code Online (Sandbox Code Playgroud)

我正在使用 Azure 的免费托管 SSL 证书,并且它未存储在 KeyVault 中。

我该如何解决这个错误?

azure azureportal azure-resource-group azure-appservice

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

如何在调试时运行测试

我一直在Visual Studio中使用ReSharper测试运行器已经有一段时间了,有一点我无法弄明白.

我以前在我的解决方案中进行了一些集成测试,它们向我的本地Web服务器执行了Web请求.我曾经能够以调试模式启动我的Web应用程序,然后在同一个Visual Studio实例(当前正在运行调试会话)中使用Resharper测试运行器启动测试,并且测试将正常运行.我的应用程序中的断点被击中,我能够调试从测试发送的请求.

但是,当我试图为新项目做同样的事情时,测试无法启动.当我运行任何测试时,Visual Studio会显示一个模态窗口Do you want to stop debugging?.为什么我在进行活动调试会话时无法运行测试?这样做的能力取决于什么?Visual Studio版本?Resharper版本?单元测试框架(我目前正在使用MSTest)?

resharper unit-testing visual-studio

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

什么是OOP中的工厂

我对“与工厂相关的”设计模式及其OOP实现的理解一直很简单。

  • “工厂方法”是具有的接口(或一个抽象类)作为返回类型和实现基于某些内部逻辑该接口构造的对象类内的方法。
  • 一个“工厂”是只包含工厂方法的类
  • 一个“抽象工厂”是一个接口(或一个抽象类),其仅包含工厂方法

但是我最近偶然发现了有关该主题的Wikipeda文章(FactoryAbstract factory),这使我有些困惑,尤其是关于OOP中的“ Factory”是什么。

这里有几个引号:

  1. 在工厂方法或工厂功能中,返回“新”对象的子例程可以称为“工厂”。
  2. 工厂用于各种设计模式
  3. “抽象工厂模式”是一种建立工厂集合的方法。
  4. 工厂是代码中具体类的位置,在该类中构造对象

引起一些问题:

(1)&(2)这是否意味着工厂不是类或对象,而是逻辑?

(2)“工厂”本身不是模式吗?

(3)“收藏”在这里是什么意思?只是说“您可以有多个实现相同接口的工厂(这是一个抽象工厂)”的一种方式吗?

(4)什么?

任何人都可以澄清这意味着什么吗?我对工厂的最初理解不正确吗?

oop design-patterns factory

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

Azure webjobs 不会使用 Azure 应用程序设置覆盖 appsettings.json

我有一个 Azure Web 作业 ( .NET Core 2.2),它在启动时从配置中读取一些设置,如下所示:

var builder = new HostBuilder()
    .UseEnvironment(Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT"))
    .ConfigureWebJobs()
    .ConfigureAppConfiguration((hostContext, configApp) =>
    {
        configApp.AddEnvironmentVariables();
        configApp.AddJsonFile("appsettings.json", optional: false);
    })
    .ConfigureLogging((hostingContext, logging) =>
    {
        logging.AddConsole();

        var instrumentationKey = hostingContext.Configuration["APPINSIGHTS_INSTRUMENTATIONKEY"];
        if (!string.IsNullOrEmpty(instrumentationKey))
        {
            Console.Writeline(instrumentationKey); // <- this always outputs key from appsettings.json, not from Azure Settings
            logging.AddApplicationInsights(instrumentationKey);
        }
    })
    .UseConsoleLifetime();     
Run Code Online (Sandbox Code Playgroud)

如你看到的, appsettings.json文件应该有一个APPINSIGHTS_INSTRUMENTATIONKEY密钥,并且在开发环境中读取它很好。

现在,对于生产,我想覆盖它 APPINSIGHTS_INSTRUMENTATIONKEY通过在 Azure 应用程序设置 Web 界面中添加具有相同密钥的设置密钥。

但是,当我将我的 webjob 部署到 Azure 时,它​​仍然具有来自appsettings.json. 为了强制我的 webjob 具有 Azure 应用程序设置中的覆盖密钥,我必须从appsettings.json. …

c# azure-webjobs

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

应用程序洞察日志丢失

我在 Azure 上托管了几个.NET服务,所有这些服务都通过 NLog 适配器( nuget 包)连接到 Application Insights Microsoft.ApplicationInsights.NLogTarget。用法非常简单:

var logger = LogManager.GetLogger(this.GetType().Name);
logger.LogInfo("Received request from user " + userId);
var result = DoSomething(userId);
if(result.Success)
    logger.LogInfo("Request successful for " + userId);
else
    logger.LogError("Request failed for " + userId);
Run Code Online (Sandbox Code Playgroud)

Application Insights 目标以标准方式在 app/web.config 中配置:

<nlog>
  <extensions>
    <add assembly="Microsoft.ApplicationInsights.NLogTarget" />
  </extensions>
  <targets>
    <target type="ApplicationInsightsTarget" name="aiTarget" />
  </targets>
  <rules>
    <logger name="*" minlevel="Trace" writeTo="aiTarget" />
  </rules>
</nlog>
Run Code Online (Sandbox Code Playgroud)

一切似乎都正常,但我最近开始注意到 Azure 中缺少一些日志。例如,对于给定的userId,Azure 包含Received request消息,但不successful包含failed消息(并且我确信流程期间没有发生异常)。此外,有些 …

c# nlog azure-application-insights

5
推荐指数
0
解决办法
2993
查看次数

使用签名检测PDF更改

我正在开发一个Web应用程序,允许用户下载PDF文件,他们必须使用他们的证书与Adobe Acrobat签名,然后上传回网络.

我使用的是C#itextsharp 5.5.9.0所有的PDF相关的工作.

现在,我需要检查文档从Web下载后是否未被更改.我试图做到这一点,让前加入我自己的签名到PDF文件中的用户下载(签字实现或多或少像这个问题).签名和验证工作正常,直到文件第二次签名(使用用户的证书).

在此之后,第一个签名以某种方式变得无效,我都与检查itextsharpAcroFields.SignatureCoversWholeDocument方法(返回false),并在Adobe Acrobat用户界面(截图).

所以,我有两个问题:

  1. 是否可以检查文件是否在两个签名之间被修改了?
  2. 如果不是 - 以编程方式(使用itextsharp)的替代方法是检查PDF文件在生成之后和签名之前是否已更改?

c# pdf itext

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

iTextSharp - 如何获取用于签名的PDF内容,然后在以后签名

我正在开发一个客户端 - 服务器应用程序,客户端必须使用签名对PDF文档进行签名并将其上载到服务器.任务由一个事实,即客户不必嵌入签名转换成PDF的手段,他们只能读取原始字节和原始字节的形式生成签名复杂.

我正在尝试实现以下工作流程:

  1. 客户端将未签名的PDF上载到服务器
  2. 服务器打开PDF,提取客户端需要签名的字节,然后将这些字节发回
  3. 客户端接收这些字节,使用客户端证书对其进行签名,并将签名发送到服务器
  4. 服务器将收到的签名嵌入到之前收到的PDF中.

我发现了一些提取字节的代码示例,用于签名并将签名字节嵌入到PDF中(这是我正在使用的主要示例).

问题是这个示例执行一个程序中的所有步骤,它在获取文档哈希后立即嵌入签名而不关闭PdfStamper.我需要一些方法来保存文档添加签名域和获取后sha.Hash,然后在一段时间后(当服务器收到计算签名)打开文档,并嵌入签名值到PDF.

您能否提供一个方法来修改这个代码,以便在步骤(2)和(4)可以是独立的,并且不需要共享实例PdfReaderPdfStamper

c# itext

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

Microsoft的MVC实现是否与传统的MVC模式不同

在关于ASP.NET MVC的网络上的各种文章中,人们都提到微软的MVC实现在某种程度上与"经典"MVC模式不同.

但我从来没有见过任何人进入这个任何细节,乍一看我没有看到ASP.NET MVC是如何从所描述的内容,比方说,任何不同的位置.

所以我的问题是:ASP.NET MVC真的违反了任何MVC模式原则吗?

model-view-controller asp.net-mvc design-patterns

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

替换为异步void

我正在开发一个监视某些任务的应用程序(例如,如果某些服务/网站当前正在运行,数据库中存在某些记录等).而且,因为大多数这些任务长时间运行,我用TPLasync/await.

我有一个基类用于所有这些任务:

public abstract class LongRunningOperation
{
    // .. some props...

    internal async void Start()
    {
        try
        {
            this.Status = OperationStatus.Started;
            await this.DoStart();
            this.Status = OperationStatus.Finished;
        }
        catch (Exception e)
        {
            this.Status = OperationStatus.Error;
            this.Message = e.ToString();
        }
    }

    protected abstract Task DoStart();
}
Run Code Online (Sandbox Code Playgroud)

启动这些任务的方法如下所示:

public static LongRunningOperation[] LaunchOperations()
{
    LongRunningOperation[] operations = GetAllLongRunningOperations();
    foreach (var o in operations)
        Task.Factory.StartNew(() => { o.Start(); });
    return operations;
}
Run Code Online (Sandbox Code Playgroud)

此方法返回的数组用于监视所有LongRunningOperations并记录统计信息.目前我有一个控制台应用程序,它有一个while (true)循环,可以打印屏幕上每个操作的统计信息(名称,状态,当前运行时)(每秒刷新一次),直到所有操作都完成.

困扰我的是async void …

.net c# task-parallel-library async-await

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