在许多不同的论坛中已经以各种形式提出了这个问题,但是,恕我直言,我还没有找到一个真正回答清楚的地方,所以我要重新构思并再次提问.
我在一个基本的微软商店工作.我们使用TFS,我们所有的开发人员都有MSDN订阅,包括VS的Team Suite版本.所以我们可以访问MSTest.
我已经阅读了各种NUnit与MSTest的比较,而开发者社区似乎非常注重选择NUnit.但至少对我们的情况来说,给出的理由似乎并不是压倒性的或令人信服的.(NUnit更频繁更新,NUnit更快,NUnit不需要TFS等)
如果我选择的话,我可以使用NUnit,但是必须保护使用没有正式支持的开源软件.我需要一个相当令人信服的理由这样做.
我基本上必须回答的是为了证明使用NUnit优先于MSTest是这样的:在NUnit中我能做些什么,我在MSTest中无法做同样的努力吗?
(我刚刚在groups.google.com上的NUnit讨论组中发布了这个)
在VS 2008下,我会在NUnit下运行我的测试,如果我需要调试,我会将VS2008调试器附加到正在运行的Nunit进程(Debug - > Attach to Process),并在我想要检查的代码上设置任何断点.当我在NUnit中点击Run buttion时,它会触及断点.(顺便说一句,如果重要的话,这是运行NUnit 2.5.2).
我刚刚升级到NUnit 2.5.4和VS 2010.当我设置断点,然后连接到NUnit时,我在断点上得到一个小警告符号,并将鼠标悬停在它上面给出工具提示"断点不会被击中.没有符号目前正在加载".转到Debug - > Windows - > Modules窗口显示加载了一大堆Windows和NUnit模块,符号状态为"Skipped loading symbols",然后是1个模块,每个模块都有一个有趣的名称(r1euhmh5)和"无符号加载"的符号状态.(没有像我正在测试的DLL那样具有远程名称的模块的痕迹).
右键单击有趣的文件名(假设是我测试中的DLL的一些映射),然后单击Load Symbol From From - > Symbol Path,导航到bin\debug文件夹,然后单击我测试的DLL的pdb文件,I收到消息"在此文件夹中找不到匹配的符号".("打开"对话框的顶部有一行显示"原始位置:r1euhmh5.pdb")
那么改变了什么?我如何在VS 2010/NUnit 2.5.4下进行调试/断点(或者当我决定通过我的VS2010选项并将它们中的一些设置为比我知道的更高级别时,我可能搞砸了一些东西在做什么?)
我感谢任何帮助.
我再一次面对"这不应该是这个?*!#hard"的情况.
问题:我想在MVC中使用表单来创建对象.对象的一个元素是一组有限的选择 - 下拉列表的完美候选者.
但是如果我在我的模型中使用SelectList,并在我的View中使用下拉列表,然后尝试将模型发布回我的Create方法,则会收到错误"Missing Method Exception:No Parameterless constructor for this object".探索MVC源代码,似乎为了绑定到模型,Binder必须能够首先创建它,并且它不能创建SelectList,因为它没有默认的构造函数.
这是简化的代码:对于模型:
public class DemoCreateViewModel
{
public SelectList Choice { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
对于控制器:
//
// GET: /Demo/Create
public ActionResult Create()
{
DemoCreateViewModel data = new DemoCreateViewModel();
data.Choice = new SelectList(new string[] { "Choice1", "Choice2", "Choice3" });
ViewData.Model = data;
return View();
}
//
// POST: /Demo/Create
[HttpPost]
public ActionResult Create(DemoCreateViewModel form)
{
try
{
// TODO: Add insert logic here
return RedirectToAction("Index");
}
catch
{
return View(); …Run Code Online (Sandbox Code Playgroud) 这似乎是一个简单的操作.
我们的开发环境(在XP/IIS 5上运行)需要在每个到达我们应用程序的HttpRequest中添加一些头文件.(这是为了模拟我们在开发中没有的生产环境).乍一看,这看起来像一个简单的HttpModule,沿着这样的方向:
public class Dev_Sim: IHttpModule
{
public void Init(HttpApplication app)
{
app.BeginRequest += delegate { app.Context.Request.Headers.Add("UserName", "XYZZY"); };
}
public void Dispose(){}
}
Run Code Online (Sandbox Code Playgroud)
但是在尝试这样做时,我发现Request的Headers集合是只读的,Add方法失败并带有OperationNotSupported异常.
花了几个小时在Google上研究这个问题,我对于应该是一个相对直接的问题没有简单的回答.
有没有人有任何指针?
我正在使用VS 2010和IIS 5开发XP(SP3)机器.
我有两个版本的同一个网站.我们发布了第一个生产版本,因此我将代码分叉到一个新的目录树中,并在IIS中设置新的虚拟目录以指向新的树.这些项目设置为在IIS而不是VS的服务器上运行.主站点是基于MVC 2的项目.
我的问题是,当我在Visual Studio 2010中点击F5开始调试新版本时,我得到一个"无法在Web服务器上开始调试.Web服务器无法找到所请求的资源." 昨天我花了很多时间试图找出它找不到的资源.这发生在它到达"应用程序启动"之前.我终于想到了查看Web日志,发现无论何时我按下F5键,web日志都会显示/debugattach.aspx的DEBUG请求,返回码为404(未找到).如果我在旧版本上运行相同的序列,它会显示相同的内容,但首先使用401代码,然后使用200代码重复请求.
我的第一个想法是VS必须写出一个"debugattach.aspx"文件,然后调用它,也许它没有对目录的写权限,但据我所知,它确实如此.
我已经google了debugattach.aspx,并且返回的所有文章的前几页似乎都是指锁定和超时,主要是在IIS 7和VS 2005上.似乎没有任何东西适用于这种情况.
看看有效的旧版本和没有的旧版本之间有什么不同,唯一的事情是虚拟目录的IIS设置和代码本身的web.config.但是我已经并排浏览了两个站点,并且找不到任何可以解释这种行为的差异.
有人知道他们可以与我分享吗?或者任何人都可以向我指出有关debugattach.aspx究竟是什么/做什么,以及DEBUG HTTP请求的作用和/或VS如何使用它们的任何文档?
提前致谢.
好吧,这一定是一些愚蠢的东西,我做错了,但我找不到它.
MVC行动:
[AcceptVerbs(HttpVerbs.Post)]
public virtual ActionResult Create(BatchCreateViewModel createModel)
{
return RedirectToRoute(MVC.Home.Display());
}
Run Code Online (Sandbox Code Playgroud)
BatchCreateViewModel:
public class BatchCreateViewModel
{
bool searchAVM;
bool searchBPO;
bool searchAppraisal;
int transactionAge;
string Description;
string uploadfile;
}
Run Code Online (Sandbox Code Playgroud)
View页面上有一些名为"searchAVM","searchBPO","searchAppraisal",(复选框)"transactionAge"(一组带整数值的单选按钮)和"description"(文本框)的控件
当我在"Create"的条目处中断时,createModel就在那里,但是具有所有默认值(对于字符串为null,对于布尔值为false,对于int为0).如果我检查Request.Form,值就在那里,但它们只是没有进入模型.
我究竟做错了什么?
(这是MVC 2,框架4)
简单的问题:我有一个WinForms按钮,我想让它(有条件地)不可见和禁用(为了确保如果有人点击隐形按钮所在的空间,它将不会激活它.)button.Visible = false也暗示button.Enabled = false,或者我是否需要在适当的时间设置/重置这两个属性?
我对MVC 1.0源代码进行了相对简单的更改,以纠正DropDownList HtmlHelper中的错误(在另一个问题中讨论).
我能够重建MVC解决方案,运行所有测试,包括我添加的一个以显示我正在修复的错误,并构建了一个新的DLL.
但是我该如何使用呢?
我尝试将新的MVC dll移动到项目中并将所有项目引用更改为指向它,但是当我尝试运行MVC网站时,它会抛出异常,说我的MVC版本与GAC中的MVC之间存在冲突.
我试图使用gacutil.exe从GAC中删除它,但它说它不能这样做,因为它会生成另一个程序(Microsoft Installer?失败.
我需要做些什么来安装我新建的版本来代替"官方"版本?
我试图通过POSTing而不是GETting导航到MVC动作.(该操作是DELETE,我不希望它通过外部链接访问.)
我在生成的网格中使用链接
Ajax.ActionLink("Remove", "Delete", new { saID = Model.Said, id = e.id }, new AjaxOptions { HttpMethod = "POST", Confirm = "Are you sure you want to delete this item?" })
Run Code Online (Sandbox Code Playgroud)
这会生成以下HTML:
<a href="/Equipment/Delete/102424/229933" onclick="Sys.Mvc.AsyncHyperlink.handleClick(this, new Sys.UI.DomEvent(event), { insertionMode: Sys.Mvc.InsertionMode.replace, confirm: 'Are you sure you want to delete this item?', httpMethod: 'POST' });">Remove</a>
Run Code Online (Sandbox Code Playgroud)
我的问题是当我点击链接时,我通过GET而不是POST进入删除操作,并且没有发生确认对话框.我一直在谷歌搜索几个小时,只是不停地缠绕在轴上.我究竟做错了什么?
我正在尝试为测试环境构建一个连接字符串,该环境将连接到不同计算机上的本地 SQL Server 实例。这样做的目的是让开发人员可以从 TFS 检出代码、构建代码并运行测试用例,同时连接到本地数据库。问题是不同开发人员的机器可能有不同的 SQL Server 设置。特别是,有些可能运行完整服务器,其他可能运行 SQL Server Express。
我正在尝试纠正一个实用程序例程,该例程将采用模板连接字符串(例如Data Source=(local); Initial Catalog= myDB; Integrated Security=SSPI;)并修改数据源以与本地服务器一起使用。
我尝试过使用SmoApplication.EnumAvailableServers()(返回一个空表,无论我使用 true 还是 false 参数),并且SqlDataSourceEnumerator.GetDataSources()(从网络返回 2888 个服务器,但本地计算机上没有),SQLCMD -L(不返回任何内容)。
有什么建议么?
或者,是否有一种简单的方法来判断特定的连接字符串是否将连接到服务器(如果没有,则无需等待其超时)。如果我能找到答案,我就可以尝试可能的嫌疑人,直到找到一个可以工作的人。
我有一个WinForm应用程序,其中多个DataGridViews绑定到SortableBindingLists.
在某些情况下,我需要以编程方式从列表中删除网格绑定的项目.
我似乎无法让DGV认识到它的数据发生了变化,或者特别是它的行数较少.我正在调用dataGridView1.Invalidate(),它正在重新绘制网格,但它尝试重绘与之前一样多的行,并抛出一系列"索引不存在"的异常,每个列都有一个例外.
这是一个展示问题的简化代码示例:(只是带有DGV和按钮的WinForm.)
private List<Employee> list;
private void Form1_Load(object sender, EventArgs e)
{
list = new List<Employee>();
for (int ix = 0; ix < 3; ix++)
{
list.Add(ObjectMother.GetEmployee(ix+1));
}
dataGridView1.DataSource = list;
}
private void cmdDeleteARow_Click(object sender, EventArgs e)
{
list.Remove(list[0]);
dataGridView1.Invalidate();
}
Run Code Online (Sandbox Code Playgroud)
在ASP.NET中,当使用GridView控件时,可以调用"DataBind()"方法来强制它刷新数据.在WinForms中似乎没有任何这样的东西,或者我错过了什么?
这似乎比它应该更难.
我正在使用MVC3,SQL Compact Edition和Entity Frameworks Code First编写事件注册站点,并使用Steven Sanderson的Mvc Scaffolding NuGet包.
由于事件列表不太可能发生太大变化,因此我将其缓存到Application_Start方法的全局列表中:
var repo = new RaceEventRepository();
EventRaces =
repo.All.Where(r => r.RaceName.Contains(eventName)).Select(r => r).ToList();
Run Code Online (Sandbox Code Playgroud)
其中RaceEventRepository是由MvcScaffolding构造的存储库类,并且执行
EventContext context = new EventContext();
Run Code Online (Sandbox Code Playgroud)
然后在存储库中使用它,并且(我假设)在存储库被处置时被处置掉.和EventRaces是一个全球可用的列表.
我的问题是,当我创建一个带有外键的注册人记录回到存储在EventRaces中的RaceEvent时,我收到一个错误"IEntityChangeTracker的多个实例无法引用实体对象."
根据几篇博客文章和SO答案,我需要从上下文中分离缓存的实体,如本文清单1所示.
我的问题是,使用ObjectBrowser,我找不到任何带有Detach方法的东西.存储库中的上下文没有.上下文中的各个DbSets没有(尽管它们具有Attach()方法).System.Data.Object.ObjectSet有一个,但我找不到DbSet和ObjectSet之间的映射.
显然,我错过了一些东西.有人能指出我正确的方向吗?
我有一个数据集的行列表,我需要迭代.
问题是迭代中的处理可能会从列表中删除一行或多行.
由于列表正在被修改,我不能使用foreach()循环.
但是因为有可能某些删除可能发生在我正在处理的元素之前,我也不能使用for()循环(即,如果我正在处理元素,那导致元素的删除还有其他元素,我想不出一种方法来调整我以正确指向我正在处理的元素之后的元素.
你会如何解决这个问题?我目前认为总是处理列表中的第一个元素.如果它被删除,则处理新的第一个元素.如果它没有被删除,则将其移至"alreadyProcessed"列表,并处理新的第一个元素.
有没有更简单的方法?
asp.net-mvc ×3
c# ×2
nunit ×2
winforms ×2
actionlink ×1
ajax ×1
button ×1
data-binding ×1
datagridview ×1
gac ×1
http-headers ×1
httprequest ×1
iis ×1
iis-5 ×1
iteration ×1
list ×1
mstest ×1
selectlist ×1
sql-server ×1