小编jus*_*ase的帖子

通过反射检测可空类型

令人惊讶的是,以下代码未通过Assert:

int? wtf = 0;
Assert.IsType<Nullable<int>>(wtf);
Run Code Online (Sandbox Code Playgroud)

所以只是出于好奇,你怎么能确定给定的实例是否是Nullable <>对象?

c# reflection nullable

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

如何以编程方式运行NUnit

我有一些引用NUnit的程序集,并使用单个测试方法创建一个测试类.我能够获得此程序集的文件系统路径(例如"C:...\test.dll").我想以编程方式使用NUnit来运行此程序集.

到目前为止,我有:

var runner = new SimpleTestRunner();
runner.Load(path);
var result = runner.Run(NullListener.NULL);
Run Code Online (Sandbox Code Playgroud)

但是,调用runner.Load(path)会抛出FileNotFound异常.我可以通过堆栈跟踪看到问题是NUnit在堆栈中调用Assembly.Load(path).如果我将路径更改为"Test,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null",那么我仍会得到相同的错误.

我已经向AppDomain.Current.AssemblyResolve添加了一个事件处理程序,以查看我是否可以手动解析此类型,但我的处理程序永远不会被调用.

让Assembly.Load(...)工作的秘诀是什么?

.net c# nunit assembly.load

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

如何将AccountId作为serverless.yml文件中的变量?

我想动态地在我的文件中构建一个ARN,但我需要获取当前的AccountId.如何将其作为变量访问?

例如:

example: arn:aws:states:${region}:${accountId}:stateMachine:${self:service}-${self:custom.stage}-example
Run Code Online (Sandbox Code Playgroud)

参考当前regionaccountId?的正确方法是什么?

编辑:(解决方案)

由于解决方案的丑陋和冗长,我对这个解决方案并不十分满意,Fn::Join但我最终做的是制作一个arns.yml文件,其中所有这些只在这一个地方然后通过其他地方的变量引用.

# arns.yml
example:
  Fn::Join:
    - ":"
    - - arn
      - aws
      - states
      - Ref: AWS::Region
      - Ref: AWS::AccountId
      - stateMachine
      - ${self:service}-${self:custom.stage}-example
Run Code Online (Sandbox Code Playgroud)

然后:

# serverless.yml
custom:
  stage: "${opt:stage, self:provider.stage}"


functions:
  foo:
    handler: handler.foo
    environment:
      example_arn: ${file(arns.yml):example}
Run Code Online (Sandbox Code Playgroud)

编辑2 :(更好的解决方案)

这可能听起来很蹩脚,但我最终选择的解决方案是将其硬编码到我的自定义变量中.我实际上有两个帐户,我使用自定义生成步骤来复制具有帐户特定设置的两个文件,如下所示:

account.stag.yml
account.prod.yml
Run Code Online (Sandbox Code Playgroud)

每个文件可能如下所示:

# account.stag.yml
account: 123456789
region: ${opt:region, "us-east-1"}
domain: mycompany.qa
Run Code Online (Sandbox Code Playgroud)

当我构建时,我指定一个帐户,并使用gulp来完成我的所有建筑:

gulp build --account stag
Run Code Online (Sandbox Code Playgroud)

然后,我将我的帐户特定设置重命名为

build/account.yml
Run Code Online (Sandbox Code Playgroud)

我可以在我的serverless.yml中引用它,如下所示:

# build/serverless.yml
custom: ${file(account.yml)}
functions: …
Run Code Online (Sandbox Code Playgroud)

amazon-web-services serverless-framework

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

如何从EnvDTE.Window中获取ITextBuffer?

我有一个使用新的VS扩展性API的托管语法高亮显示器,它给了我一个ITextBuffer很好的.

在我的扩展的另一部分,我得到一个DTE对象并附加到活动窗口更改事件,这给了我一个EnvDTE.Window对象.

var dte = (EnvDTE.DTE)this.GetService(typeof(EnvDTE.DTE));
dte.Events.WindowEvents.WindowActivated += WindowEvents_WindowActivated;
// ...

private void WindowEvents_WindowActivated(EnvDTE.Window GotFocus, EnvDTE.Window LostFocus)
{
  // ???
  // Profit
}
Run Code Online (Sandbox Code Playgroud)

我想在这个方法中将ITextBuffer从Window中取出.谁能告诉我一个直接的方法呢?

c# visual-studio-2010 envdte

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

C#4.0,检测方法是否缺失

我有一种情况,我想将LinePragmas添加到CodeDom对象.但是一些代码dom对象具有LinePragma属性,而有些则没有.

所以我想知道是否可以使用dynamic关键字来检测对象上是否存在属性(不抛出异常),如果有,则添加pragma.这是我目前的方法:

public static T SetSource<T>(this T codeObject, INode sourceNode)
    where T : CodeObject
{
    codeObject.UserData["Node"] = sourceNode.Source;
    dynamic dynamicCodeObject = codeObject;

    // How can I not throw an exception here?
    if (dynamicCodeObject.LinePragma != null)
    {
        dynamicCodeObject.LinePragma = new CodeLinePragma(
        sourceNode.Source.Path.AbsoluteUri,
        sourceNode.Source.StartLine);
    }

    return codeObject;
}
Run Code Online (Sandbox Code Playgroud)

更新: 我使用的解决方案是添加一个名为Exists()的扩展方法.我在这里写了一篇关于它的博客文章: 成员存在动态C#4.0

jist是创建一个扩展方法,返回一个实现DynamicObject的TryGetMember的对象.它使用反射然后返回true或false.这允许你编写这样的代码:

object instance = new { Foo = "Hello World!" };
if (instance.Reflection().Exists().Foo)
{
    string value = instance.Reflection().Call().Foo;
    Console.WriteLine(value);
}
Run Code Online (Sandbox Code Playgroud)

c# codedom dynamic

7
推荐指数
2
解决办法
3316
查看次数

WP7 PathGeometry错误

我对一个简单的PathGeometry对象有一个奇怪的错误,我似乎无法搞清楚.如果有人能向我解释为什么这不起作用,我将不胜感激.

这是一个工作路径的示例,它绘制一个小三角形:

<Path Data="M 8,4 L 12,12 4,12 8,4 Z" Stroke="White" />
Run Code Online (Sandbox Code Playgroud)

这是一个似乎对我不起作用的Path的示例:

<Path Stroke="White">
    <Path.Data>
        <PathGeometry Figures="M 8,4 L 12,12 4,12 8,4 Z" />
    </Path.Data>
</Path>
Run Code Online (Sandbox Code Playgroud)

Data和Figures属性中的字符串是相同的,但后一个示例导致异常:

属性数字的无效属性值M 8,4 L 12,12 4,12 8,4 Z.

我最想做的是将PathGeometry放入ResourceDictionary并将其作为{StaticResource}引用,以便我可以重复使用我的形状.

编辑:

我的解决方案是尝试使用StaticResource引用PathGeometry,而不是引用字符串资源.

<sys:String x:Key="TriangleShape">M 8,4 L 12,12 4,12 8,4 Z</sys:String>
...
<Path Data={StaticResource TriangleShape}" />
Run Code Online (Sandbox Code Playgroud)

silverlight path pathgeometry windows-phone-7

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

Path.Combine是否曾在.net中进行网络呼叫?

我认识的人声称它确实存在并且我正在反编译System.IO并查看Path类,我看不到它正在进行网络调用.唯一的嫌疑人是在NormalizePath中,它调用PathHelper,调用Win32Native.GetFullPathName.我不知道那是做什么的.

他们还声称System.Uri在创建时进行网络呼叫,我觉得非常不可思议.我无法相信它会这样做,因为这将是多么令人难以置信的缓慢以及这些方法的内在性.

任何人都可以开导我吗?

编辑: 事实证明,Path.Combine(p)它不会调用网络,但Path.GetFullName(p)可以.在你有一个具有短文件名的UNC路径的情况下("\\server\abcdef~1.txt"例如),它实际上将呼叫网络并尝试扩展路径,这让我大吃一惊.

.net c# networking uri filepath

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

我可以从 AWS Lambda 创建的最大出站连接是多少?

我正在查看有关Lamba 限制的文档,其中说:

文件描述符数量 1,024

我想知道这是每次调用 lambda 还是所有 lambda 的总数?

我正在处理来自 kinesis 流的大量项目,我正在调用一个 Web 端点,我似乎遇到了大约 1024 个到 API 的并发连接的瓶颈,我不确定瓶颈在哪里。我正在调查我的负载均衡器和实例的限制,但我也想知道 lambda 本身是否不能在所有 lambda 中创建超过 1024 个并发出站连接?

aws-lambda aws-sdk-nodejs

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

从linux获取导出函数的名称和地址

我可以使用PIMAGE_DOS_HEADERAPI(示例)从Windows中的可执行文件中获取导出的函数名称和指针的列表.

什么是Linux的等效API?

对于上下文我正在创建单元测试可执行文件,我正在导出以名称"test_"开头的函数,我希望可执行文件只是在运行时旋转并执行所有测试函数.

示例伪代码:

int main(int argc, char** argv)
{
    auto run = new_trun();
    auto module = dlopen(NULL);
    auto exports = get_exports(module);  // <- how do I do this on unix?
    for( auto i = 0; i < exports->length; i++)
    {
        auto export = exports[i];
        if(strncmp("test_", export->name, strlen("test_")) == 0)
        {
          tcase_add(run, export->name, export->func);
        }
    }

    return trun_run(run);
}
Run Code Online (Sandbox Code Playgroud)

编辑:

在使用这个问题的最佳答案之后,我能够找到我的样子: 在C中动态列出所有的功能/符号?

另外,我不得不使用下面的答案中的gnu_hashtab_symbol_count函数Nominal Animal来处理DT_GNU_HASH而不是DT_HASH.

我的最终测试主要功能如下所示:

int main(int argc, …
Run Code Online (Sandbox Code Playgroud)

c linux dllimport dllexport

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

对于MongoDB变更流读取器,什么是好的横向扩展策略?

我正在考虑实现MongoDB变更流读取器,并且我想确保自己做的正确。关于如何实现实际阅读器代码,有很多简单的示例,包括官方文档,我对此不太担心。

但是,我有点担心读者会落在变更流之后而无法跟上变化,我想确保读者能够处理变更流。

mongo服务器是一个群集,为了便于讨论,我们假设它每天都非常忙。鉴于更改流API必须迭代流结果而不是像队列一样对其进行操作,因此更改流API似乎仅与单个实例兼容。因此,我担心,与将新项目推送到流中相比,迭代实例的单个实例完成工作的时间可能更长。

我的直觉是实际上让读者简单地读取流,将更改分批处理,然后将其推入队列,然后其他工作人员可以水平扩展以完成工作。但是,作为读者,我仍然只有一个实例,即使仅做一些将修改放入队列的最小工作,它在理论上仍可能落后于潮流。

所以我的问题是,这有多么现实的担忧,并且有什么办法可以创建一种读者,即使仅将更改流式传输到工作人员队列中,也可以水平扩展?我还应考虑哪些其他因素?

mongodb changestream

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