小编Jür*_*ock的帖子

Git for Windows:SSL 证书问题:证书已过期

我知道Let\'s Encrypt所做的更改可能会影响旧客户端,因为根证书会过期。请参阅DST 根 CA X3 到期(2021 年 9 月)

\n

但是,我认为这不会影响我,因为我的开发机器是最新的。

\n

但从今天开始,我在执行以下操作时收到消息git pull

\n
fatal: unable to access \'https://git.company.tld/project.git/\': SSL certificate problem: certificate has expired\n
Run Code Online (Sandbox Code Playgroud)\n

我刚刚下载了最新的 Windows 版 Git (2.33.0),并确认内置的OpenSSL是最新的 ( OpenSSL 1.1.1k 25 Mar 2021),这应该很好。

\n

Let\xe2\x80\x99s 加密证书的 OpenSSL 客户端兼容性更改

\n

但错误似乎仍然存在。

\n
openssl s_client -showcerts -connect git.company.tld:443\n
Run Code Online (Sandbox Code Playgroud)\n

节目

\n
openssl s_client -showcerts -connect git.company.tld:443\n
Run Code Online (Sandbox Code Playgroud)\n

问题不在于颁发的证书本身,它没有过期并且被 Chrome(Windows证书存储)和 Firefox 接受。

\n

git openssl certificate lets-encrypt

103
推荐指数
5
解决办法
5万
查看次数

有没有办法在不添加throws声明的情况下抛出异常?

我有以下情况.

我有一个Java类,它继承自另一个基类并覆盖一个方法.基本方法不会抛出异常,因此没有throws ...声明.

现在我自己的方法应该能够抛出异常,但我要么选择了

  • 吞下例外
  • 添加投掷声明

两者都不满意,因为第一个会默默地忽略异常(好吧我可以执行一些日志记录)而第二个会因为方法标题不同而产生编译器错误.

public class ChildClass extends BaseClass {

        @Override 
        public void SomeMethod() {
            throw new Exception("Something went wrong");
        }
}
Run Code Online (Sandbox Code Playgroud)

java exception-handling

71
推荐指数
5
解决办法
5万
查看次数

检查Windows路径中是否存在可执行文件

如果我使用ShellExecute(或在.net中System.Diagnostics.Process.Start())运行进程,则启动文件名进程不需要是完整路径.

如果我想开始记事本,我可以使用

Process.Start("notepad.exe");
Run Code Online (Sandbox Code Playgroud)

代替

Process.Start(@"c:\windows\system32\notepad.exe");
Run Code Online (Sandbox Code Playgroud)

因为direcotry c:\windows\system32是PATH环境变量的一部分.

如何在不执行进程且不解析PATH变量的情况下检查PATH上是否存在文件?

System.IO.File.Exists("notepad.exe"); // returns false
(new System.IO.FileInfo("notepad.exe")).Exists; // returns false
Run Code Online (Sandbox Code Playgroud)

但我需要这样的东西:

System.IO.File.ExistsOnPath("notepad.exe"); // should return true
Run Code Online (Sandbox Code Playgroud)

System.IO.File.GetFullPath("notepad.exe"); // (like unix which cmd) should return
                                           // c:\windows\system32\notepad.exe
Run Code Online (Sandbox Code Playgroud)

是否有预定义的类可以在BCL中执行此任务?

.net c# file

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

使用自己的IComparer <T>和Linq OrderBy

我有一个通用的

List<MyClass>
Run Code Online (Sandbox Code Playgroud)

where MyClass属性InvoiceNumber包含如下值:

200906/1
200906/2
..
200906/10
200906/11
200906/12

我的名单必然是一个

BindingList<T>
Run Code Online (Sandbox Code Playgroud)

支持使用linq进行排序:

protected override void ApplySortCore(
           PropertyDescriptor property, ListSortDirection direction)
{

    _sortProperty = property;
    _sortDirection = direction;

    var items = this.Items;

    switch (direction)
    {
        case ListSortDirection.Ascending:
            items = items.OrderByDescending(x => property.GetValue(x)).ToList();
            break;
        case ListSortDirection.Descending:
            items = items.OrderByDescending(x => property.GetValue(x)).ToList();
            break;
    }

    this.Items = items;

}
Run Code Online (Sandbox Code Playgroud)

但是默认的比较器排序(假设)如下:

200906/1
200906/10
200906/11
200906/12
200906/2

在这种情况下这是令人讨厌的.

现在我想用自己的方式IComparer<T>.它看起来像这样:

public class MyComparer : IComparer<Object>
{

    public int Compare(Object stringA, Object …
Run Code Online (Sandbox Code Playgroud)

c# linq sql-order-by icomparer

32
推荐指数
4
解决办法
7万
查看次数

检查类型是否在不考虑泛型类型参数的情况下实现泛型接口

我有一个界面

public interface MyInterface<TKey, TValue>
{
}
Run Code Online (Sandbox Code Playgroud)

实现是无关紧要的.现在我想检查给定类型是否是该接口的实现.这种方法失败了

public class MyClass : MyInterface<int, string>
{
}
Run Code Online (Sandbox Code Playgroud)

但我不知道怎么做检查.

public void CheckIfTypeImplementsInterface(Type type)
{
    var result1 = typeof(MyInterface<,>).IsAssignableFrom(type); --> false
    var result2 = typeof(MyInterface<int,string>).IsAssignableFrom(type); --> true
}
Run Code Online (Sandbox Code Playgroud)

为了使result1真实,我该怎么做?

c# generics types interface

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

有没有办法强制执行MySQL执行顺序?

我知道我可以通过使用FORCE INDEX (abc)关键字来改变MySQL执行查询的方式.但有没有办法改变执行顺序?

我的查询如下所示:

SELECT c.*
FROM table1 a
INNER JOIN table2 b ON a.id = b.table1_id
INNER JOIN table3 c ON b.itemid = c.itemid
WHERE a.itemtype = 1
  AND a.busy = 1
  AND b.something = 0
  AND b.acolumn = 2
  AND c.itemid = 123456
Run Code Online (Sandbox Code Playgroud)

我有一个关键用于我使用的每个关系/约束.如果我在这个语句上运行解释,我看到mysql首先开始查询c.

id    select_type    table    type
1     SIMPLE         c        ref
2     SIMPLE         b        ref
3     SIMPLE         a        eq_ref
Run Code Online (Sandbox Code Playgroud)

但是,我知道在命令中查询 a -> b -> c会更快(我已经证明了)有没有办法告诉mysql使用特定的顺序?

更新:我知道这a -> b -> c更快.

上面的查询需要1.9秒才能完成并返回7行.如果我将查询更改为

SELECT …
Run Code Online (Sandbox Code Playgroud)

mysql performance sql-execution-plan

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

更新整数列中的特定位

我有一个mysql表,其中用户权限存储为位掩码:

|user   | permissions |
| Admin | 31          |
| User  | 13          |

           16 8  4  2  1
Admin ->   1  1  1  1  1  -> 16 + 8 + 4 + 2 + 1 -> 31
User  ->   0  1  1  0  1  ->  8 + 4 + 1 -> 13
Run Code Online (Sandbox Code Playgroud)

现在我想为每个使用sql查询的用户添加权限.假设我想为每个人添加权限16而不修改另一个位.

 UPDATE users SET permission = ????
Run Code Online (Sandbox Code Playgroud)

我该怎么做呢?

mysql bitmask

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

从Linq表达式获取参数值

我有以下课程

public class MyClass
{
    public bool Delete(Product product)
    {
        // some code.
    }
}
Run Code Online (Sandbox Code Playgroud)

现在我有一个看起来像这样的助手类

public class Helper<T, TResult>
{

    public Type Type;
    public string Method;
    public Type[] ArgTypes;
    public object[] ArgValues;

    public Helper(Expression<Func<T, TResult>> expression)
    {
        var body = (System.Linq.Expressions.MethodCallExpression)expression.Body;

        this.Type = typeof(T);
        this.Method = body.Method.Name;
        this.ArgTypes = body.Arguments.Select(x => x.Type).ToArray();
        this.ArgValues = ???
    }
}
Run Code Online (Sandbox Code Playgroud)

这个想法是从某个地方使用这个代码:

// I am returning a helper somewhere
public Helper<T> GetMethod<T>()
{
    var product = GetProduct(1);
    return new Helper<MyClass>(x => x.Delete(product));
} …
Run Code Online (Sandbox Code Playgroud)

c# linq expression-trees

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

在TimeSpan上使用String.Format输出完整的秒数而不是毫秒

我想在字符串中显示两个日期之间的经过时间.

假设我有以下代码:

DateTime date1 = DateTime.Now();
System.Threading.Thread.Sleep(2500);
DateTime date2 = DateTime.Now();

TimeSpan elapsed = date2.substract(date1);
Console.WriteLine("> {0:hh:mm:ss}", elapsed);
Run Code Online (Sandbox Code Playgroud)

我期待的是:

> 00:00:03
Run Code Online (Sandbox Code Playgroud)

我得到了什么:

> 00:00:02.5002500
Run Code Online (Sandbox Code Playgroud)

有没有办法使用String.Format函数只返回完整秒?
我还尝试删除小数位:

elapsed = elapsed.Substract(TimeSpan.FromMiliseconds((double)Timespan.Miliseconds);
Run Code Online (Sandbox Code Playgroud)

但是,自从elapsed以来,这都不起作用.Miliseconds返回500作为整数.

c# string.format timespan

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

GitLab CI和MsBuild(带测试)

我正在使用GitLab将我的svn repsitories迁移到git.

现在我已经看到有一个与GitLab CI的持续集成实现,只是想尝试一下.

我已经安装并配置了Runner,但Gitlab抱怨我没有.gitlab-ci.yml文件.

我已经使用TeamCity进行持续集成,所以我不想花太多精力编写构建脚本.

任何人都可以告诉我在哪里可以找到一个基本的gitlab-ci.yml文件基本示例,基本上只是构建我的解决方案并运行所有测试(MSTests)?

continuous-integration gitlab gitlab-ci

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