我花了一整天的时间来解决这个令人难以置信的Windows 10命令提示功能,这让我觉得我的控制台应用程序代码出了问题.我希望它能帮助别人.
问题:我的控制台应用程序似乎随机停止运行.到底是怎么回事?
我得到了一个非常令人沮丧的Silverlight插件崩溃,影响了IE和Firefox.
事件日志中的错误是:
Faulting application name: iexplore.exe, version: 9.0.8112.16421, time stamp: 0x4d76255d
Faulting module name: npctrl.dll, version: 5.0.61118.0, time stamp: 0x4ec5fc64
Exception code: 0xc0000094
Fault offset: 0x0001d720
Faulting process id: 0x434
Faulting application start time: 0x01ccf0b878b55ca7
Faulting application path: C:\Program Files (x86)\Internet Explorer\iexplore.exe
Faulting module path: c:\Program Files (x86)\Microsoft Silverlight\5.0.61118.0\npctrl.dll
Report Id: bd79af3d-5cab-11e1-8948-000c29de3e25
Run Code Online (Sandbox Code Playgroud)
我已经在异常期间附加WinDbg以获取更多信息:
(17e4.13f8): Break instruction exception - code 80000003 (first chance)
*** ERROR: Symbol file could not be found. Defaulted to export symbols for C:\Windows\SYSTEM32\ntdll.dll -
ntdll!DbgBreakPoint:
00000000`77810530 cc …Run Code Online (Sandbox Code Playgroud) 在我的一个解决方案中,当我右键单击一个符号并为其他一个解决方案项目中定义的对象选择"Go To Implementation"时,它会列出两次引用并强制我选择一个.
根据图标,似乎列表中的一个项目代表项目,另一个代表一个dll.我点击哪一个并不重要 - 它会转到同一个源文件.
我在这个特定项目中只有一次库引用 - 它引用了项目.
什么会导致这种情况发生?也许是某种循环引用问题?
我正在使用SQL Server数据工具(SSDT)来管理我的数据库架构.每次我选择发布对架构的更改时,脚本都包含以下内容:
IF EXISTS (SELECT 1
FROM [master].[dbo].[sysdatabases]
WHERE [name] = N'$(DatabaseName)')
BEGIN
ALTER DATABASE [$(DatabaseName)]
SET RECOVERY FULL
WITH ROLLBACK IMMEDIATE;
END
Run Code Online (Sandbox Code Playgroud)
问题是,我不希望它将恢复模式更改为FULL.我希望它是简单的.
如何修改我的SSDT项目以表明我想要简单的恢复模式,以便每次发布时它都会停止尝试将其更改为完整模式?
我可以轻松地显示加载消息,而activate方法正在这样做:
<div data-bind="compose:ActiveVm">
<div class="text-center" style="margin : 75px">
<i class="fa fa-spinner fa-spin"></i>
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
但是,如果我然后使用不同的viewmodel更新我的ActiveVm属性,则不会显示启动内容.我知道启动内容仅用于显示"初始"加载,但在从一个视图模型转换到另一个视图模型时,我有什么选项可用于显示此类消息?
请注意,此合成不参与路由...
更新:此处相关的durandal问题可能对未来访客有价值:https://github.com/BlueSpire/Durandal/issues/414
到目前为止,我的测试表明,在Silverlight中利用MVVM模式的所有标准方法,示例和框架都存在一个巨大的问题:大量内存泄漏会阻止VM被垃圾回收.
显然这是一个巨大而荒谬的主张 - 所以我的期望是有人会明白我为什么和哪里出错的答案:)
重现的步骤很简单:
<TextBox Text="{Binding SomeText}" />
这将创建一个从根,BindingExpression扩展到viewmodel的引用链.然后,您可以从UI树中删除View以及所有对VM的引用 - 但是由于root <> BindingExpression <> VM引用链,VM永远不会被垃圾回收.
我创建了两个说明问题的例子.它们有一个按钮来创建一个新的视图/视图模型(它应该转储所有对旧视图的引用)和一个强制垃圾收集并报告当前内存使用情况的按钮.
实施例1是超级剥离的校准微实例.示例2不使用框架,只是以我能想到的最简单的方式说明问题.
对于那些可能想要帮助但又不想下载示例项目的人,这里是代码2的代码.我们从一个名为FooViewModel的viewmodel开始:
public class FooViewModel : INotifyPropertyChanged
{
string _fooText;
public string FooText
{
get { return _fooText; }
set
{
_fooText = value;
NotifyPropertyChanged("FooText");
}
}
private byte[] _data;
public FooViewModel()
{
_data = new byte[10485760]; //use up 10mb of memory
}
private void NotifyPropertyChanged(String info)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(info)); …Run Code Online (Sandbox Code Playgroud) 我希望在我的一个视图模型中实现一些限制行为.这是一个Silverlight应用程序,但我认为这不是特别重要.
考虑一个具有三个属性的类:
每当更新其中一个属性时,都需要刷新.
private void Refresh()
{
//Call out to the server, do something when it comes back
}
Run Code Online (Sandbox Code Playgroud)
我的目标如下:
如果重要,我正在使用ChannelFactory实现服务器调用.
我可以用什么样的模式来实现这个目标?这是反应性扩展可以帮助我吗?
编辑:
将保罗的答案标记为正确.虽然ReactiveUI目前不支持silverlight5,但它清楚地概述了使用Rx解决问题的方法/组合步骤.
首先,我想说我一般都喜欢nuget,并且在许多小项目中使用它很多,尤其是在尝试新事物时.
但是,我有很多理由认为Nuget不适合我的主要项目/环境:
简而言之,我想知道我的项目会发生什么,Nuget在"帮助我"方面过于咄咄逼人,而不是我能忍受.
所以当我创建一个支持MVC和WebAPI的新"空"asp.net项目并发现自己配置了8个nuget包时,我真的很失望.这些文件中的大部分都是浪费的(我真的不需要每个版本的.Net框架都有JSON.Net,但是谢谢).
为了获得没有nuget的类似设置,我做了以下事情:
啊,我们走了.好多了.
然后我继续并右键单击Controllers文件夹>添加控制器并右键单击views文件夹和>添加视图.
令人费解的是,nuget包文件又回来了,并通过添加"帮助我"
谁说我想用jquery验证?!
所以我的问题是:我如何阻止这种疯狂?如果我不想使用nuget,我注定要围绕VS工具做脚尖?
或者,我也会接受一个令人信服的论点,解释说我对我的项目中的内容有不必要的肛门保留,应该只喝Kool-Aid.
我希望分页只显示我的记录比我的pageSize更多.有没有办法实现这种影响?
理想情况下,当在客户端上添加/删除数据时,分页机制将相应地显示/隐藏(再次,仅显示是否存在比页面大小更多的项目).
任何想法/解决方法?
更新
一旦我删除了高度设置代码,j4ro提供的答案似乎很有效.对我来说没有必要,但是你的里程可能会有所不同,因为我没有用更典型的用例来测试它.
dataBound: function () {
if (this.dataSource.totalPages() === 1) {
this.pager.element.hide();
}
else {
this.pager.element.show();
}
}
Run Code Online (Sandbox Code Playgroud) 场景:我正在调试一些存储过程,并遇到了断点。
现在,我想执行一些查询,以便进一步调试问题。 我怎么做?
我尝试从新的查询窗口执行查询,但是似乎调试经验已锁定所有表。
即时窗口似乎也遇到了同样的问题。
为了使用库,我需要能够绑定到UL元素的"for"属性.
这不起作用:
<ul for="${id}"> ... </ul>
Run Code Online (Sandbox Code Playgroud)
基于测试我假设这是因为ul元素通常没有for属性.我该如何解决这个问题?这在Durandal/knockout中是微不足道的,我相信它是这样的:
data-bind="attr: { for: $data.id }"
我真的必须创建自定义属性吗?这会与用于的内置属性冲突label吗?还有其他明显的解决方法吗
c# ×4
.net ×3
silverlight ×2
sql-server ×2
aurelia ×1
command-line ×1
crash ×1
durandal ×1
durandal-2.0 ×1
freeze ×1
javascript ×1
kendo-grid ×1
kendo-ui ×1
memory-leaks ×1
mvvm ×1
nuget ×1
resharper ×1
windows-10 ×1