我在 Visual Studio 2015 中编写了一个应用程序,它使用 C# 6.0 功能并针对 .NET 4.5.2。当我使用 Microsoft Build Tools 2015 构建它时,这是由我们的 TeamCity 服务器完成的,生成的 bin 文件夹还包含mscorlib.dll. 这里的问题是 mscorlib.dll被复制的是 .NET 4.6 DLL,这会导致运行时出现问题。
我已经用string.Format()新的字符串插值语法替换了我的调用来解决这个问题。然而,这将根本问题推到了地毯下,而不是解决它:为什么 .NET 4.6 DLL 包含在我的构建中,我如何强制将 4.5.2 DLL 包含在它的位置?
如果您对这给我造成的运行时问题感兴趣,它会导致我的:
string.Format(CultureInfo.InvariantCulture, "{0}='{1}'", "key", "value")
Run Code Online (Sandbox Code Playgroud)
被解释为(链接——仅存在于 .NET 4.6 中):
System.String System.String.Format(System.IFormatProvider, System.String, System.Object, System.Object)
Run Code Online (Sandbox Code Playgroud)
而不是(链接):
System.String System.String.Format(System.IFormatProvider, System.String, params System.Object[])
Run Code Online (Sandbox Code Playgroud) 我遇到一个数据库调用问题,AccessViolationException当我调用时会抛出一个数据库调用ExecuteNonQuery().调用包含在一个try-catch块中,但异常永远不会被捕获.相反,我在Windows事件日志中得到一个关于它的条目.有没有办法在代码中捕获此异常?
IDbCommand cmd = ...
cmd.CommandText = "...";
try
{
var results = command.ExecuteNonQuery();
}
catch (Exception ex)
{
Console.Writeline("Caught exception: " + ex.Message);
}
Run Code Online (Sandbox Code Playgroud)