项目A使用log4net 1.2.13.0,并依赖于库B,它使用log4net 1.2.11.0.如果我这样做Package Manager Console> Add-BindingRedirect,我得到一个正确的绑定重定向app.config:
<dependentAssembly>
<assemblyIdentity name="log4net" publicKeyToken="669e0ddf0bb1aa2a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-1.2.13.0" newVersion="1.2.13.0" />
</dependentAssembly>
Run Code Online (Sandbox Code Playgroud)
我认为这个是必需的,以便完成构建.但是构建成功也没有重定向.这是我在构建日志中看到的(详细程度设置为详细):
统一主要参考"log4net,Version = 1.2.13.0,Culture = neutral,PublicKeyToken = 669e0ddf0bb1aa2a".在"C:\ Users\vorou\code\ConsoleApplication1\packages\LibraryB.dll"中使用此版本而不是原始版本"1.2.11.0",因为AutoUnify为"true".
什么是AutoUnify的全部?哪个更好,即在.config中有明确的重定向是否有任何优势?
此外,我记得,在某些情况下,您需要添加绑定重定向.否则应用程序将在运行时爆炸.这些案件是什么以及为什么这种AutoUnify魔法对他们不起作用?
UPD这是MSDN关于以下内容的摘录AutoUnify:
此参数用于构建程序集,例如DLL,它们不能具有正常的App.Config文件.如果为true,则会自动将生成的依赖关系图视为传递给AppConfigFile参数的App.Config文件.此虚拟App.Config文件具有每个冲突的程序集集的bindingRedirect条目,以便选择最高版本程序集.这样做的结果是永远不会有关于冲突组件的警告,因为每个冲突都将得到解决.
看起来.config中的重定向在我的情况下不起任何作用.问题是库B无法满足它的依赖性,并AutoUnify通过"假装有绑定重定向"规则来解决它.
我需要为一个非常大的(50GB +)ASCII文本文件构建索引,这将使我能够提供对文件的快速随机读取访问(获取第n行,在第n行获得第n个单词).我决定使用List<List<long>> map,其中map[i][j]元素是文件中第i行第j个字的位置.
我将按顺序构建索引,即读取整个文件并使用map.Add(new List<long>())(新行)和map[i].Add(position)(新单词)填充索引.然后,我将检索具体的单词位置map[i][j].
我看到的唯一问题是我无法预测行/单词的总数,因此我会在每次List重新分配时碰到O(n),不知道如何避免这种情况.
我为此任务选择的数据结构是否还有其他问题?哪种结构可能更好?
UPD:在运行时期间不会更改文件.除了我列出的内容之外,没有其他方法可以检索内容.
我正在使用ToBsonDocument扩展方法MongoDB.Bson来转换这个字典:
var dictionary = new Dictionary<string, object> {{"person", new Dictionary<string, object> {{"name", "John"}}}};
var document = dictionary.ToBsonDocument();
Run Code Online (Sandbox Code Playgroud)
这是结果文件:
{ "person" :
{ "_t" : "System.Collections.Generic.Dictionary`2[System.String,System.Object]",
"_v" : { "name" : "John" } } }
Run Code Online (Sandbox Code Playgroud)
有没有办法摆脱这些_t/_v的东西?我希望生成的文档看起来像这样:
{ "person" : { "name" : "John" } }
Run Code Online (Sandbox Code Playgroud)
UPD:我在DictionaryGenericSerializer中找到了代码:
if (nominalType == typeof(object))
{
var actualType = value.GetType();
bsonWriter.WriteStartDocument();
bsonWriter.WriteString("_t", TypeNameDiscriminator.GetDiscriminator(actualType));
bsonWriter.WriteName("_v");
Serialize(bsonWriter, actualType, value, options); // recursive call replacing nominalType with actualType
bsonWriter.WriteEndDocument();
return;
}
Run Code Online (Sandbox Code Playgroud)
因此,当值类型为时,似乎没有太多选项可用于此序列化程序object.
在mongo shell中进行研究时,我经常编写非常复杂的查询,并希望将结果存储在其他集合中.我知道如何做到这一点.forEach():
db.documents.find(query).forEach(function(d){db.results.insert(d)})
但每次写这些东西都很乏味.有更干净的方式吗?我希望语法类似于db.documents.find(query).dumpTo('collectionName').
我有一个N层应用程序,我使用规范模式.现在,我想提供一些方法来构建客户端代码的规范.它必须是几个预定义的选项,如下所示:
这些对象(我称之为过滤器)不能包含任何逻辑(方法),只能包含数据 - 过滤器类型和参数.并且必须有自然的方式将它们转换为服务器规范.以下是客户端的外观示例:
var serviceClient = new DataModuleService();
var equalFilter = new ContainsFilter<Book>("Title","Lord of the Rings");
var lordOfTheRingBooks = serviceClient.GetBooks(equalFilter);
Run Code Online (Sandbox Code Playgroud)
还必须有所有标准操作的过滤器类型(如Equal,Greater,In,Between,StartsWith for string等)以及将它们与布尔运算符(和,或不是)组合的方法.
是否有一些模式/标准实践来实现这样的事情?
UPD:任务现在被冻结了,我开始认为任务定义本身存在问题.
我有一个测试应用程序,有一个类TestSeq和一个方法Go(),它包含这样的块:
_writer.WriteLine("Doing foo action...");
var stopwatch = Stopwatch.StartNew();
// foo - some work here
stopwatch.Stop();
_writer.WriteDone("Results of foo action.", stopwatch.Elapsed);
Run Code Online (Sandbox Code Playgroud)
在"一些工作"中,我对WCF客户端有不同的调用(CRUD操作,过滤器等).
所以,很多代码都在重复,显然有些重构应该在这里完成.我想创建一个类TestAction,但我不知道什么是将"一些工作"放在其中的最佳方法.
在我看来,这是一个非常简单的问题,但我不知道应该搜索哪些关键字.所以,我很高兴看到只有一个关键字(模式名称或东西)或链接的答案.
我想在集成测试SetUp例程中删除队列中的所有消息,我该如何实现?google/intellisense-bruteforce没有运气.
如果重要 - 我正在使用RabbitMq作为传输.
main-kittens我正在搜索类型文档的索引Kitty。现在,我想做一个实验。对于某些用户,我想experiment-kittens改为搜索。类型与 \xe2\x80\x94 相同Kitty,并且所有字段与主索引中的值相同,但是虽然Bio主索引中的字段始终为空,但在实验之一中它存储了巨大的字符串。
Bio现在的问题是,由于内存/磁盘限制,我无法存储所有小猫的数据。所以experiment-kittens只有最近的小猫(比如上个月)。
我希望大多数用户的搜索保持完整(即始终使用主索引)。对于选定的,我想合并结果。逻辑应该是:
\n\nsearch userquery + date_created < 1 month ago in experiment-kittens\nsearch userquery + date_created > 1 month ago in main-kittens\nRun Code Online (Sandbox Code Playgroud)\n\n结果应该按 排序create_date,但结果太多,无法在我的应用程序中进行排序。
有没有办法让弹性对两个索引执行两个不同的查询并合并结果?
\n\n(我也确信这个问题可能有更优化的解决方案,如果你有的话请告诉我)。
\n我有一个控制器的动作:
public ActionResult Find(IEnumerable<string> ids) { ... }
Run Code Online (Sandbox Code Playgroud)
我成功地通过路线调用它../Find?ids=01&ids=02&ids=03.DefaultModelBinder轻松绑定参数,无需额外配置.但是,当我尝试进行出站路由时,即在我的视图中使用这样的代码
@Url.Action("Find", "Grid", new {ids=new List<string>{01,02,03}})
Run Code Online (Sandbox Code Playgroud)
.. ..?ids=System.Collections.Generic.List1[System.String]我的URL中有一个很好的查询字符串.我已经找到了一些建议编写自定义绑定/路由的答案,但我相信这样一个简单的任务应该更容易解决而无需任何额外的代码.
PS:我非常乐意改变我的查询字符串格式,我只想依靠一些默认的框架行为来完成任务:在querystring中传递一个数组.
简短版本:使用查询字符串中的数组呈现控制器操作链接的最简单方法是什么?
我的任务是以C#控制台应用程序的形式提供对非常大(50GB +)的ASCII文本文件(在第n行中处理第n行/第n个单词的请求)的随机读取访问.
谷歌搜索和阅读几天后,我已经达到了这样的实现愿景:由于StreamReader擅长顺序访问,使用它来构建文件中的行/单词的索引(List<List<long>>map,其中map[i][j]是第i个第j个单词的位置)线开始).然后使用索引通过MemoryMappedFile访问文件,因为它擅长提供随机访问.
解决方案中是否存在一些明显的缺陷?它对于给定的任务是否是最佳的?
UPD:它将在64位系统上执行.
我写了一些ScalaTest表驱动的属性检查,我正在尝试运行它们sbt test.查看报告,我看到它ScalaTest可以识别JUnit我拥有的所有测试(它们与检查在同一个类中),它运行属性检查(即forAll正文),但它不forAll作为测试.如果失败,我会在报告中看到堆栈跟踪(ScalaTest测试异常失败)并sbt说测试运行期间出现"错误",但它表示所有测试都已通过.报告中的测试总数仅包括JUnit测试.
是否支持这种测试方式sbt?
c# ×7
mongodb ×2
.net ×1
algorithm ×1
asp.net-mvc ×1
bigdata ×1
bson ×1
dictionary ×1
io ×1
junit ×1
list ×1
masstransit ×1
mongo-shell ×1
mq ×1
msbuild ×1
nest ×1
nuget ×1
query-string ×1
rabbitmq ×1
refactoring ×1
routing ×1
sbt ×1
scala ×1
scalatest ×1
testing ×1
unit-testing ×1