小编Igo*_*nko的帖子

如何为线程不安全的集合编写单元测试

我正在使用TDD方法编写一个双向链表.此集合类型不是线程安全的.为了实现ICollection接口,我的列表类必须具有多个公共属性(包括IsSynchronized和SyncRoot,它们用于提供使用线程安全的集合方式).这两个属性的代码非常简单:

public bool IsSynchronized { get { return false; } }

private readonly object _syncRoot = new object();
public object SyncRoot { get { return _syncRoot; } }
Run Code Online (Sandbox Code Playgroud)

问题是如何为它编写正确的单元测试.此测试应检查正确的用法和错误使用.

c# tdd multithreading unit-testing thread-safety

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

需要免费模拟PostSharp

我听说过PostSharp,但我想知道是否还有其他类似的工具 - 类似于PostSharp的东西?

是否有任何库可以用作PostSharp的替代品?任何其他可以后处理程序集并根据属性注入代码的工具?

PostSharp的任何免费和/或开源替代品都会特别有趣.

谢谢.

.net c# aop attributes postsharp

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

如何组织将为多个平台构建的类库项目的源代码?

我正在开发一个类库项目,它为客户端应用程序提供了许多有用的扩展方法.该项目预计将用于各种平台(.NET框架的版本).

为了做到这一点,我将使用几个单独的Visual Studio项目,每个项目都用于自己的平台.这些项目可能有自己的外部依赖项,但源代码将通过使用"添加作为参考"功能在它们之间共享.这种方法允许我通过在一个文件中编写代码来更改所有项目的实现,而无需将其复制到其他项目.记住目标框架的差异,我需要使用#if编译器指令.每个项目的结果将作为特定版本的.NET框架的NuGet包发布.

这是我有两个问题:

  1. 每个新文件都必须添加到每个项目中,否则将无法编译,并且在某个平台上无法访问其中定义的每个类.你可以意识到这很容易忘记.有没有办法避免这种文件跟踪?有可能实现自动化吗?
  2. 如何改善整个基础设施?您在项目中使用了哪些方法和/或解决方案?

c# projects-and-solutions code-organization visual-studio

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

Google 的密钥管理系统:密钥轮换后数据未加密

语境

我正在按照 GCP 的说明在存储桶中存储机密。KMS 用于在文件上传到存储桶之前对其进行加密

由于数据加密发生在 Google 的存储之外,因此我对密钥轮换的一个方面感到有些困惑。

设想

让我们考虑一个特定的场景:

  1. 在2017-01- 01我创建了一个钥匙环和钥匙A(这实际上是A_ver1由于密钥版本)。此外,密钥轮换策略设置为每年触发轮换。
  2. 在2017-01- 15我运行一个命令加密some_file.txtA_ver1curl -s -X POST "https://cloudkms.googleapis.com/v1/projects/my-project/<...>" \ -d "{\"plaintext\":\"<...SOME_FILE_CONTENT...>\"}" \ -H "Authorization:Bearer $(gcloud auth application-default print-access-token)" \ -H "Content-Type:application/json"
  3. 我立即将加密结果保存到存储桶中some_file.txt.encrypted
  4. 我什么都不做,在2018 -01-01 发生了密钥轮换。据我了解A_ver1被禁用A_ver2被生成和激活。这两个事件几乎同时发生。
  5. 2018-06 -01 我意识到我需要解密some_file.txt.encrypted. 我正在下载文件,然后尝试运行命令以使用A_ver2...

问题

问题 1A_ver2 …

google-cloud-storage google-cloud-platform google-cloud-kms

3
推荐指数
2
解决办法
429
查看次数

间接引用声明具有类型限制的泛型扩展方法的程序集时出现奇怪的编译错误

嗯,我很清楚我的问题的标题太复杂了.我只是想尽可能具体.所以,我会尝试更好地解释问题.

问题背景

假设我们在一个解决方案中有三个.NET项目.主项目是一个简单的控制台应用程序ApplicationAssembly.该项目引用了另一个托管程序集库DirectlyReferencedLibrary.同时DirectlyReferencedLibrary指的是IndirectlyUsedLibrary.

因此,项目用法看起来像: ApplicationAssembly - > DirectlyReferencedLibrary - > IndirectlyUsedLibrary.

请注意,ApplicationAssembly不直接使用任何声明为IndirectlyUsedLibrary的类型.我们还假设在这些程序集中声明的所有类型都驻留在同一名称空间中.

此解决方案编译并正常工作.

奇怪的问题

当我在一起时遇到以下情况时会出现问题:

  1. ApplicationAssembly项目有LINQ表达式的用法.例如,如果在可枚举类型的任何对象上调用Select().
  2. DirectlyReferencedLibrary宣称其具有与类型限制的通用扩展方法的类.类型限制表示泛型类型必须是来自IndirectlyUsedLibrary的类的后代.

这是一个这样的类的例子.

using System;

namespace Test
{
    public static class UnUsedType
    {
        // It's a generic extension method with a type restriction.
        public static void Magic<T>(this T @this)
            // It's a type restriction that uses a type from the IndirectlyUsedLibrary.
            where T : ProblemType
        {
            Console.WriteLine("I do nothing actually.");
        }
    } …
Run Code Online (Sandbox Code Playgroud)

.net c# generics extension-methods generic-method

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

com.android.internal.R.attr和android.R.attr有相同的值集吗?

我需要使用Android资源的内置值.存储该值com.android.internal.R.attr.listViewStyle.由于无法从我的代码中获取,我试图找到我可以使用的适当值.好吧,我刚刚找到了android.R.attr.listViewStyle.

问题1:这些值是否相同?

问题2:我在哪里可以找到XML com.android.internal.R.attr.listViewStyle?也许我必须创建自己的风格而不是那个风格.为了找到它我应该看看那个文件.

对不起,如果这些问题很愚蠢.我是Android开发的新手.

android

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