在Visual Studio中卸载项目时,任何引用项目都会在对已卸载项目的引用上获得警告三角形.我自己写了一个宏来做聪明的事情(检测添加/删除项目并将任何引用转换为文件/项目依赖项),但我不能相信我没有错过更简单的东西.如果我必须手动更改引用(并打破'个人解决方案/共享项目'团队开发范例),卸载功能如何可以使用.
(这个问题与关于在Visual Studio中构建大型解决方案的问题的答案有关 - 一些答案提到了包含大量项目的解决方案,但是"卸载"未使用的项目以提高性能.)
我的方法可能完全偏离正轨,但在解决这个问题的过程中,我试图得到一个数字0-9的所有排列的列表.
我正在寻找使用像这样的n-ary树来解决它:
type Node =
| Branch of (int * Node list)
| Leaf of int
Run Code Online (Sandbox Code Playgroud)
我对自己很满意,因为我已经设法弄清楚如何生成我想要的树.
我现在的问题是我无法弄清楚如何遍历这个树并将每个叶子的'path'作为int提取出来.令我困惑的事情是我需要匹配单个节点,但我的"外部"功能需要采用节点列表.
我当前的尝试几乎做了正确的事情,除了它返回我所有路径的总和......
let test = Branch(3, [Branch(2, [Leaf(1)]);Branch(1, [Leaf(2)])])
let rec visitor lst acc =
let inner n =
match n with
| Leaf(h) -> acc * 10 + h
| Branch(h, t) -> visitor t (acc * 10 + h)
List.map inner lst |> List.sum
visitor [test] 0 //-> gives 633 (which is 321 + 312)
Run Code Online (Sandbox Code Playgroud)
我甚至不确定这是尾递归. …
类型不匹配.期待
LexBuffer<char>但是给定aLexBuffer<byte>类型'char'与'byte'类型不匹配
这是我在使用fslex时收到的错误消息.我试过手动检查每次出现的lexbuf及其类型.它是LexBuffer<char>无处不在.但编译器仍然给我上述错误.你能否告诉我为什么会出现这种错误以及如何解决它.
{
open System
open Microsoft.FSharp.Text.Lexing
open Microsoft.FSharp.Text.Parsing
let lexeme (lexbuf : LexBuffer<char>) = new System.String(lexbuf.Lexeme)
let newline (lexbuf:LexBuffer<char>) = lexbuf.EndPos <- lexbuf.EndPos.NextLine
let unexpected_char (lexbuf:LexBuffer<char>) = failwith ("Unexpected character '"+(lexeme lexbuf)+"'")
}
let char = ['a'-'z' 'A'-'Z']
let digit = ['0'-'9']
let float = '-'?digit+ '.' digit+
let ident = char+ (char | digit)*
let whitespace = [' ' '\t']
let newline = ('\n' | '\r' '\n')
rule tokenize = parse
| …Run Code Online (Sandbox Code Playgroud) 显然,VS 将构建后和构建前事件包装在一个 cmd 文件中,它会弹出到 LocalSettings/Temp 文件夹中。卡巴斯基突然(昨天工作正常)决定这是一个威胁(RootShell 风险),并将它们置于隔离状态,这使我的 VS 挂起,并且无法编译项目(除了通过它们全部手动删除事件)。
这里的系统管理员 - 可以理解 - 不热衷*.TMP.EXEC.CMD于对 LocalSettings/Temp 文件夹中的文件进行通配符异常处理。到目前为止,我的 Google-fu 还没有帮助我。
有没有人遇到过这个问题或有任何提示?
编辑FWIW,与 git、SmartGit 和其他程序负载相同的问题。卡巴斯基为了自己的利益而变得聪明......
是否可以在VS2010中使用带F#的MSTest.人们多次提出这个问题.但我似乎无法在答案中找到解决方案.有没有人能够使用MSTest进行F#单元测试,还是应该坚持使用NUnit?
安装此版本后,不会构建任何涉及 F# 的内容,一切都会引发相同的异常:
error FS0193: Could not load file or assembly System.Buffers, Version=4.0.3.0, blablabla..
Run Code Online (Sandbox Code Playgroud)
显然这与我正在构建的内容无关。即使尝试let x = 3在 fsi.exe 中执行也有同样的问题。
还有其他人有这个问题吗?
我一直在查看 System.Reactive 的源代码(这里),它把我带到了这个地方,在同一个变量上有一个Volatile.Read后跟Interlocked.CompareExchange, :
if (Volatile.Read(ref _runDrainOnce) == 0
&& Interlocked.CompareExchange(ref _runDrainOnce, 1, 0) == 0)
{
//do something
}
Run Code Online (Sandbox Code Playgroud)
当我阅读它时,其逻辑是“如果 runDrainOnce 为 0,并且在我将其更改为 1 之前它为零”。这里有什么微妙的吗?为什么第一次检查不是多余的?
(更令人难以置信的是,在同一个函数中有 alock和 a Monitor.Pulse。这是下注的结果吗?:))
整个功能:
private void Schedule()
{
// Schedule the suspending drain once
if (Volatile.Read(ref _runDrainOnce) == 0
&& Interlocked.CompareExchange(ref _runDrainOnce, 1, 0) == 0)
{
_drainTask.Disposable = _scheduler.ScheduleLongRunning(this, DrainLongRunning);
}
// Indicate more work is to be done by the drain loop …Run Code Online (Sandbox Code Playgroud) 我遇到了应用程序挂起的问题,并给了我默认的“请告诉 Microsoft 有关此问题”的弹出窗口,而不是应用程序中的“未处理的异常”对话框。
在应用程序代码中,Application.ThreadException 和 AppDomain.CurrentDomain.UnhandledException 都被重定向到一个方法,该方法将错误日志写入磁盘、将屏幕截图保存到磁盘并显示友好的对话框。
但是当这个错误发生时,这三件事都不会发生。我在事件查看器中得到的只是:
事件类型 clr20e3、P1 myapp.exe、P2 4.0.0.0、P3 47d794d4、P4 mscorlib、P5 2.0.0.0、P6 471ebc5b、P7 15e5、P8 27、P9 system.argumentoutofrange、P10 NIL
鉴于该错误似乎只在应用程序运行几个小时后才会发生,我想知道这是否可能是内存泄漏问题。我搜索了一些“clr20e3”,但只找到了 ASP.Net 的东西。我的应用程序是 Windows Forms (.Net 2.0) exe,使用了相当多的程序集 - 使用 C# 和一些非托管 C++。
我想这也可能是错误处理方法中的错误 - 正如一些答案所建议的那样,我可能会尝试在错误处理程序的开头进行日志记录(但考虑到这几乎就是我所做的......)。
任何解决此问题的帮助都将不胜感激 - 无论是解决方案还是如何找出问题根本原因的建议。
更新:原始错误的根本原因是访问具有负索引的数组(即 system.argumentoutofrange)。为什么这没有被捕获对我来说有点神秘,但考虑到两个异常都被发送到相同的处理代码,我想知道是否可能不存在(例如)两者都被调用并争夺资源的情况(例如日志文件)?
我通过在错误处理代码中执行任何其他操作之前执行 EventLog.WriteEntry 来证明这一点。现在添加了一个标志以防止在错误处理中重新进入,我似乎不再有问题......