小编Dyl*_*tie的帖子

如何在没有尝试的情况下检查File.Delete()是否会成功,在C#中?

在C#中,System.IO.File.Delete(filePath)将删除指定的文件,或引发异常.如果当前用户没有删除文件的权限,则会引发UnauthorizedAccessException.

有没有什么方法可以提前判断删除是否可能抛出UnauthorizedAccessException(即查询ACL以查看当前线程的标识是否有权删除指定的文件?)

我基本上是想做:

if (FileIsDeletableByCurrentUser(filePath)) {
    /* remove supporting database records, etc. here */
    File.Delete(filePath);
}
Run Code Online (Sandbox Code Playgroud)

但我不知道如何实现FileIsDeletableByCurrentUser().

.net c# security permissions

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

如何在C#中对单元测试性能优化进行单元测试?

我在我正在构建的一些搜索代码中使用了Levenshtein算法的优化版本.我有功能单元测试来验证算法返回正确的结果,但在这种情况下,算法的性能也非常重要.

我希望为项目添加一些测试覆盖率,以便如果将来的任何修改影响优化,它们将显示为失败测试 - 因为算法是确定性的并且针对已知测试数据运行,这可能与计数一样详细为给定的一组测试输入执行的指令数.换句话说,我不打算使用定时器测量算法性能 - 我对实际测试算法的内部行为而不仅仅是输出感兴趣.

有什么想法我会如何在C#/ .NET 4中解决这个问题?

编辑:我不想只使用挂钟时间的原因是它会随着CPU负载和测试控制之外的其他因素而变化.例如,这可能导致在构建服务器负载时测试失败.这里是挂钟监控的部署系统的一部分.

编辑2:这样想吧......当性能是关键要求时,你会如何应用red-> green-> refactor?

c# optimization unit-testing micro-optimization

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

为什么运算符'=='不能应用于struct和default(struct)?

在对结构集合使用FirstOrDefault()之后,我看到了一些奇怪的行为.我把它分成了这个复制案例.这个程序不会编译

using System;
using System.Linq;

namespace MyProgram {
    public class Program {
        static void Main() {

            var users = new User[] {
            new User() { UserGuid = Guid.NewGuid(), Username = "user01" },
            new User() { UserGuid = Guid.NewGuid(), Username = "user02" }
        };

            var user = users.FirstOrDefault(u => u.Username == "user01");
            Console.WriteLine(user == default(User) ? "not found" : "found");
        }

    }

    public struct User {
        public Guid UserGuid;
        public string Username;
    }
}
Run Code Online (Sandbox Code Playgroud)

编译器错误是相当神秘的:

运算符'=='不能应用于'MyProgram.User'和'MyProgram.User'类型的操作数

将结构更改为类可以正常工作 - 但我不知道为什么我无法将结构'实例'与默认值进行比较?

c# struct operators

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

为什么Set-ItemProperty对Windows 10下的IIS应用程序没有影响?

我们的大多数Web应用程序都包含Deploy.ps1 Powershell脚本.Octopus Deploy使用它在生产部署期间配置应用程序,但我们也使用它来设置开发人员的本地IIS设置.在Windows 7,Windows 8.1和我们所有的Win2012生产服务器上都可以正常工作.

它不适用于Windows 10,这似乎是因为Set-ItemPropertycmdlet无效.没有错误消息或任何东西,它只是没有做任何事情.

IIS站点api.example.com已经存在,我们使用Powershell创建/ myapp应用程序,然后将应用程序的物理路径更改为D:\ Projects\Demo

PS C:\> IIS:
PS IIS:\> cd Sites\api.example.com
PS IIS:\Sites\api.example.com> New-WebApplication myapp -site api.example.com -PhysicalPath C:\inetpub\wwwroot

Name             Application pool   Protocols    Physical Path
----             ----------------   ---------    -------------
myapp            DefaultAppPool     http         C:\inetpub\wwwroot

PS IIS:\Sites\api.example.com> set-itemproperty myapp -name PhysicalPath -value D:\Projects\Demo

PS IIS:\Sites\api.example.com> get-itemproperty myapp

Name             Application pool   Protocols    Physical Path
----             ----------------   ---------    -------------
demo             DefaultAppPool     http         C:\inetpub\wwwroot

                                                 ^ THIS IS WRONG!
Run Code Online (Sandbox Code Playgroud)

在Windows 7上运行完全相同的命令集,您将获得相同的输出,但在最后一步,PhysicalPath属性已按预期更改:

PS IIS:\Sites\api.example.com> get-itemproperty myapp

Name             Application pool …
Run Code Online (Sandbox Code Playgroud)

powershell web-administration windows-10 iis-10

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

.NET可以将Unicode转换为ASCII以删除"智能引号"等吗?

我们的一些用户使用无法处理Unicode的电子邮件客户端,即使在邮件头中正确设置了编码等.

我想"规范化"他们收到的内容.我们遇到的最大问题是用户将来自Microsoft Word的内容复制到我们的Web应用程序中,然后通过电子邮件转发该内容 - 包括分数,智能引号以及Word为您帮助插入的所有其他扩展Unicode字符.

我猜这里没有明确的解决方案,但在我坐下来开始编写伟大的查找表之前,是否有一些内置的方法可以让我开始?

基本上涉及三个阶段.

首先,从其他正常字母中删除重音 - 解决方案就在这里

This paragraph contains “smart quotes” and áccénts and ½ of the problem is fractions
Run Code Online (Sandbox Code Playgroud)

This paragraph contains “smart quotes” and accents and ½ of the problem is fractions
Run Code Online (Sandbox Code Playgroud)

其次,用它们的ASCII等效替换单个Unicode字符,给出:

This paragraph contains "smart quotes" and accents and ½ of the problem is fractions
Run Code Online (Sandbox Code Playgroud)

在我实现自己的解决方案之前,这是我希望有解决方案的部分.最后,使用合适的ASCII序列替换特定字符 - ½到1/2,依此类推 - 我很确定任何类型的Unicode魔法本身都不支持,但是有人可能已经写了一个合适的查找表我可以再利用.

有任何想法吗?

.net unicode ascii normalize codepages

17
推荐指数
2
解决办法
7101
查看次数

如何使用Git分支支持覆盖TeamCity 7.1中的<default>分支名称?

我有一个CI构建从Github拉出功能分支,并使用基于项目,分支和内部版本号的文件夹命名约定将它们构建/打包到本地文件夹中.

对于命名分支(feature1,feature2),这非常有用.

问题在于,当我对master进行提交时,TeamCity会将teamcity.build.branch公开为<default>- 这意味着当构建步骤扩展时

E:\Packages\MyProject\%teamcity.build.branch%\

它结束了E:\Packages\MyProject\<default>- 然后崩溃构建步骤,因为它不是有效的Windows路径.

可以在完全限定的构建参数中看到主分支名称:

teamcity.build.branch                         <default>
teamcity.build.checkoutDir                    C:\TeamCity\BuildAgents\agent-mulder\work\2151838a7933464d
teamcity.build.default.checkoutDir            2151838a7933464d
teamcity.build.id                             16347
teamcity.build.vcs.branch.github_myproject    refs/heads/master
Run Code Online (Sandbox Code Playgroud)

但理想情况下,我需要获得master作为teamcity.build.branch,以便在我的构建步骤中使用.

我可以在运行时转换参数吗?覆盖行为?我甚至尝试将VCS分支名称设置为DO_NOT_USE,希望"master"不再符合默认值 - 但这似乎也不起作用.

teamcity continuous-integration git-branch teamcity-7.1

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

这个set/array操作有名字吗?

给定输入数组

[a,b,c,d,e]
Run Code Online (Sandbox Code Playgroud)

和'加入'功能 (a,b) => (a+b)

我的代码返回以下数组数组,包含通过将join函数应用于各种元素对而获得的每个可能的变体,同时保持顺序:

[
  [a,b,c,d,e],
  [a,b+c,d,e],
  [a,b+c+d,e],
  [a,b,c+d,e],
  [a+b,c,d,e],
  [a+b,c+d,e],
  [a+b+c,d,e],
  [a+b+c+d,e],
  [a,b,c,d+e],
  [a,b+c,d+e],
  [a,b+c+d+e],
  [a,b,c+d+e],
  [a+b,c,d+e],
  [a+b,c+d+e],
  [a+b+c,d+e],
  [a+b+c+d+e],
]
Run Code Online (Sandbox Code Playgroud)

在视觉上,我想要做的是:

有序分区图

代码可以工作,但我不知道该怎么称呼它 - 并且想要使用熟悉此操作的其他开发人员可以理解的名称,如果存在这样的名称.它不是一个电源组,但它是类似的......这个特定的set/array操作有一个名字吗?

编辑:好的.它们不是排列 ; 排列将是不同顺序的5元素阵列[[a,b,c,d,e], [e,d,c,b,a], [a,d,b,c,e], ...]

它们不是分区,因为任何子集只能包含输入的相邻元素. - 换句话说,分区允许这样:

描绘非相邻元素的分区的图

(这可能源于纯集理论,没有有序集的概念.)

它们不是组合,因为输出的每个元素都只使用输入集的每个成员一次.

我认为myArray.OrderedPartitions((a,b) => (a+b))可能是一个适当的简洁和解释.

arrays algorithm math set-theory powerset

17
推荐指数
2
解决办法
363
查看次数

使用RestSharp时如何以惯用方式处理HTTP错误代码?

我正在使用RestSharp构建HTTP API客户端,我注意到当服务器返回HTTP错误代码(401 Unauthorized,404 Not Found,500 Internal Server Error等)时,RestClient.Execute()不会抛出异常 - 而是我得到一个RestResponsenull .Data属性的有效.我不想在我的API客户端中手动检查每个可能的HTTP错误代码 - RestSharp是否提供了将这些错误传递给我的客户端应用程序的更好方法?

更进一步的细节.RestSharp公开一个Response.ErrorException属性 - 如果RestClient.Execute<T>()调用导致任何异常,它将通过ErrorException属性公开而不是被抛出.他们的文档包括以下示例:

// TwilioApi.cs
public class TwilioApi {
    const string BaseUrl = "https://api.twilio.com/2008-08-01";

    public T Execute<T>(RestRequest request) where T : new()
    {
    var client = new RestClient();
    client.BaseUrl = BaseUrl;
    client.Authenticator = new HttpBasicAuthenticator(_accountSid, _secretKey);
    request.AddParameter("AccountSid", _accountSid, ParameterType.UrlSegment); // used on every request
    var response = client.Execute<T>(request);

    if (response.ErrorException != null)
    {
        const string message …
Run Code Online (Sandbox Code Playgroud)

c# http restsharp

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

我可以暂时覆盖.NET应用程序中的DNS解析吗?

我有一些包装代码,它运行一组NUnit测试,扫描实时网站以获取某些响应代码.

我想针对不同的服务器运行这些测试.手动运行时,我可以通过编辑Windows\System32\drivers中的/ etc/hosts文件并暂时将www.mysite.com设置为10.0.0来执行此操作.

有什么方法可以在.NET控制台应用程序中做同样的事情 - 暂时覆盖DNS记录或以某种方式拦截分辨率并返回不同的IP地址?

编辑:这用于测试Web场中的多个服务器.我有三个实时服务器,所有这些都认为它们是www.example.com.因为服务器使用HTTP主机头,所以我不能只针对server1,然后是server2,然后是server3运行测试,因为对http:// server1 /的HTTP请求 不会返回与http://请求相同的内容.www.example.com/已经解决了server1 ...

c# dns nunit ipconfig hosts-file

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

如何使用Autoit/Autohotkey模仿Visual Studio的"Ctrl-K,C"两步宏行为?

我正在尝试为一些常见任务设置AutoHotkey宏,我希望热键模仿Visual Studio的"两步快捷方式"行为 - 即按Ctrl- K将启用"宏模式"; 在微距模式下,按某些键将运行一个宏,然后禁用"宏模式",任何其他键只会禁用宏模式.

示例 - 键入文件名时,我希望能够通过点击Ctrl- K然后按下来插入今天的日期D.

有没有人有一个像这样的状态AutoHotkey脚本的好例子?

autohotkey

15
推荐指数
2
解决办法
2590
查看次数