令人惊讶的是,以下代码未通过Assert:
int? wtf = 0;
Assert.IsType<Nullable<int>>(wtf);
Run Code Online (Sandbox Code Playgroud)
所以只是出于好奇,你怎么能确定给定的实例是否是Nullable <>对象?
我有一些引用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(...)工作的秘诀是什么?
我想动态地在我的文件中构建一个ARN,但我需要获取当前的AccountId.如何将其作为变量访问?
例如:
example: arn:aws:states:${region}:${accountId}:stateMachine:${self:service}-${self:custom.stage}-example
Run Code Online (Sandbox Code Playgroud)
参考当前region
和accountId
?的正确方法是什么?
编辑:(解决方案)
由于解决方案的丑陋和冗长,我对这个解决方案并不十分满意,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) 我有一个使用新的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中取出.谁能告诉我一个直接的方法呢?
我有一种情况,我想将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) 我对一个简单的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) 我认识的人声称它确实存在并且我正在反编译System.IO并查看Path类,我看不到它正在进行网络调用.唯一的嫌疑人是在NormalizePath中,它调用PathHelper,调用Win32Native.GetFullPathName.我不知道那是做什么的.
他们还声称System.Uri在创建时进行网络呼叫,我觉得非常不可思议.我无法相信它会这样做,因为这将是多么令人难以置信的缓慢以及这些方法的内在性.
任何人都可以开导我吗?
编辑:
事实证明,Path.Combine(p)
它不会调用网络,但Path.GetFullName(p)
可以.在你有一个具有短文件名的UNC路径的情况下("\\server\abcdef~1.txt"
例如),它实际上将呼叫网络并尝试扩展路径,这让我大吃一惊.
我正在查看有关Lamba 限制的文档,其中说:
文件描述符数量 1,024
我想知道这是每次调用 lambda 还是所有 lambda 的总数?
我正在处理来自 kinesis 流的大量项目,我正在调用一个 Web 端点,我似乎遇到了大约 1024 个到 API 的并发连接的瓶颈,我不确定瓶颈在哪里。我正在调查我的负载均衡器和实例的限制,但我也想知道 lambda 本身是否不能在所有 lambda 中创建超过 1024 个并发出站连接?
我可以使用PIMAGE_DOS_HEADER
API(示例)从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) 我正在考虑实现MongoDB变更流读取器,并且我想确保自己做的正确。关于如何实现实际阅读器代码,有很多简单的示例,包括官方文档,我对此不太担心。
但是,我有点担心读者会落在变更流之后而无法跟上变化,我想确保读者能够处理变更流。
mongo服务器是一个群集,为了便于讨论,我们假设它每天都非常忙。鉴于更改流API必须迭代流结果而不是像队列一样对其进行操作,因此更改流API似乎仅与单个实例兼容。因此,我担心,与将新项目推送到流中相比,迭代实例的单个实例完成工作的时间可能更长。
我的直觉是实际上让读者简单地读取流,将更改分批处理,然后将其推入队列,然后其他工作人员可以水平扩展以完成工作。但是,作为读者,我仍然只有一个实例,即使仅做一些将修改放入队列的最小工作,它在理论上仍可能落后于潮流。
所以我的问题是,这有多么现实的担忧,并且有什么办法可以创建一种读者,即使仅将更改流式传输到工作人员队列中,也可以水平扩展?我还应考虑哪些其他因素?
c# ×5
.net ×2
aws-lambda ×1
c ×1
changestream ×1
codedom ×1
dllexport ×1
dllimport ×1
dynamic ×1
envdte ×1
filepath ×1
linux ×1
mongodb ×1
networking ×1
nullable ×1
nunit ×1
path ×1
pathgeometry ×1
reflection ×1
silverlight ×1
uri ×1