我有一台新的笔记本电脑在工作,本周早些时候工作的代码今天不起作用.
以前工作的代码是简化的:
while (dr.Read())
{
int i = int.Parse(dr.GetString(1))
}
Run Code Online (Sandbox Code Playgroud)
现在它在数据库值为0时失败.有时,但不可靠,这将起作用:
while (dr.Read())
{
int i = Convert.ToInt32(dr["FieldName"]))
}
Run Code Online (Sandbox Code Playgroud)
我错过了一些愚蠢的东西吗?
奇怪的是,ReSharper也遇到了大量奇怪的错误,我使用上面的代码得到了相同的错误信息:"输入字符串的格式不正确." (在我加载项目之前开始.)
有任何想法吗?任何有SP问题的人?当我拿到机器时,我确实试图确保所有的SP都是最新的.
编辑:我知道如何使用Try.Parse和错误处理.这里的代码是简化的.我正在从数据库表中读取测试用例.此列仅包含0,1和2值.我已经证实了这一点.我打破了这一点,将数据库字段放入字符串变量s然后尝试int.Parse(s).该代码本周早些时候工作,数据库没有改变.唯一改变的是我的环境.
为了完全简化问题,这行代码抛出异常("输入字符串格式不正确"):
int.Parse("0");
Run Code Online (Sandbox Code Playgroud)
编辑:感谢大家帮我解决这个问题!解决方案是强制重置我的语言设置.
Type.GetProperties()是否保证其PropertyInfo []结果的某个顺序?例如按属性名称或它们在代码中出现的顺序按字母顺序返回它们.或者订单是否未定义?
假设MSSQL Server上的存储过程使用了一个SQL事务BEGIN TRANSACTION/COMMIT TRANSACTION,这与开始和使用ADO.NET通过提交一个有SqlConnection.BeginTransaction()什么不同?
这个问题可能与另一个问题有关,它肯定会导致System.BadImageFormatException.也许它是相同的东西,但暴露不同?
我有以下代码:
public interface IFoo<T> where T : class, new() {
T FooMethod(object o);
}
public interface IFooRepo {
F GetFoo<T, F>() where T : class, new() where F : IFoo<T>;
}
Run Code Online (Sandbox Code Playgroud)
然后我有一个测试,使用Moq模拟IFooRepo,如下所示:
var instance = new Mock<IFooRepo>().Object;
Run Code Online (Sandbox Code Playgroud)
上面的代码运行正常,除非在使用Visual Studio 2008调试测试时.当我跳过上面的行时,会通过Castle.DynamicProxy从System.Reflection.Emit抛出System.BadImageFormatException.难道这是类似的东西 Ayende Rahien贴?
现在的解决方法是为IFooRepo实现一个假,但我很好奇为什么会为这种情况生成一个坏图像并且有一个修复?System.Reflection.Emit是否有错误?或者我在自己的代码中遗漏了一些明显的东西?
编辑:为GetFoo()发布了错误的签名.将签名更正为GetFoo <T,F>(),正确地再现了问题.安装GDR后,此问题仍然存在.
编辑:似乎如果F上的约束包括类型参数T BadImageFormatException被引发.但是我把它更改为,where F : class, new()然后一切都按预期工作.
所以我花了一些时间与ASP.NET MVC 2(目前坚持使用Visual Studio 2008),现在已经开始使用Ninject 2.2及其MVC集成.我从以下位置下载了Ninject 2.2和Ninject.Web.Mvc:
https://github.com/downloads/ninject/ninject/Ninject-2.2.0.0-release-net-3.5.zip
https://github.com/downloads/ninject/ninject.web.mvc/Ninject.Web.Mvc2 -2.2.0.0-release-net-3.5.zip
并在我的MVC 2项目中引用它们.我的Global.asax.cs文件看起来像这样(几乎是Ninject.Web.Mvc自述文件所说的):
using System;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;
using Ninject.Web.Mvc;
using Ninject;
namespace Mvc2 {
public class MvcApplication : NinjectHttpApplication {
public static void RegisterRoutes(RouteCollection routes) {
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
}
protected override void OnApplicationStarted() {
AreaRegistration.RegisterAllAreas();
RegisterRoutes(RouteTable.Routes);
}
protected override IKernel CreateKernel() { …Run Code Online (Sandbox Code Playgroud) 我有一些代码循环遍历当前加载到在 ASP.NET 应用程序中运行的 AppDomain 中的类型。以下是我获取程序集的方法:
var assemblies = AppDomain.CurrentDomain.GetAssemblies();
Run Code Online (Sandbox Code Playgroud)
当应用程序第一次启动时没有问题,并且我期望的所有类型都存在。但是,当我更新 Web.config 或终止 w3p.exe 进程(或该进程因任何原因被回收)时,只有一些我期望的类型可用。当我使用调试器单步执行时,我注意到私有搜索路径(我的应用程序的 bin 目录)中的某些程序集尚未加载。我假设所有程序集都在应用程序启动和重新启动时加载,无论是否立即需要它们。但在重新启动的情况下,除非这些程序集文件已更新,否则似乎不会发生这种情况。
我需要的是在启动时收集类型信息以供以后使用。但由于在重新启动期间类型不可用,因此当需要使用类型信息时会造成严重破坏。那么考虑到这一点,我该如何解决或解决这个缺陷呢?
例如,客户端规范的某些部分映射来自"已发布"库的文件.有没有办法让这些所谓的已发布地图强制为只读,即它们无法打开进行编辑?
例如(忽略[不可编辑]):
//Development/foo/... //client/foo/...
//Published/bar/1.0/... //client/bar/... [not editable]
//Published/qux/2.0/... //client/qux/... [not editable]
Run Code Online (Sandbox Code Playgroud)
换句话说,我想阻止文件被打开(例如,默认情况下被锁定),我想知道这是否可以在客户端规范级别强制执行.
如果没有,是否可以使用"已发布"的软件仓库对某些用户只读?
c# ×3
.net ×2
reflection ×2
ado.net ×1
appdomain ×1
asp.net-mvc ×1
assemblies ×1
debugging ×1
moq ×1
ninject ×1
ninject-2 ×1
ninject.web ×1
perforce ×1
sql-server ×1
transactions ×1