请考虑以下简化的接口继承层次结构:
// Starting point:
public interface Base {
void Foo();
}
public interface Derived extends Base {
}
Run Code Online (Sandbox Code Playgroud)
它旨在将Foo
方法从Base
接口移动到Derived
接口:
// Desired end-point:
public interface Base {
}
public interface Derived extends Base {
void Foo();
}
Run Code Online (Sandbox Code Playgroud)
为了逐步实现这种突破性改变,希望在Base
一段时间内保持接口的向后兼容性.
这可以通过将Base
接口上的方法标记为@Deprecated
:
// Intermediate state:
public interface Base {
/**
* @deprecated This method is deprecated as of release X. Derived.Foo should be used instead.
*/
@Deprecated void Foo();
}
public interface …
Run Code Online (Sandbox Code Playgroud) 包含托管代码和非托管代码混合的.NET程序集不能与其他程序集进行ILMerged.
如何验证给定的.NET程序集是包含纯托管代码,还是托管代码和非托管代码的混合?
考虑以下C#代码结构(S0-S3是任意代码块的占位符):
try
{
S0;
}
catch (Exception ex)
{
S1;
}
finally
{
S2;
}
S3;
Run Code Online (Sandbox Code Playgroud)
在S1在catch
处理程序内抛出异常的情况下,finally
仍然会执行S2 (但S3不会).
假设S1不能抛出,在finally
块内有S2是否有任何意义,而不是在S3之前将它放在try/catch/finally之外?
try
{
// Do something that might throw
}
catch (Exception ex)
{
// Save the exception to re-throw later
// NB: This statement cannot throw an exception!
this.cachedException = ex;
}
finally
{
S2;
}
S3;
Run Code Online (Sandbox Code Playgroud)
有这个finally
块有什么意义吗?下面的代码是不是等价的(严格假设catch
块中的内容不能抛出):
try
{
// Do something that might throw
}
catch …
Run Code Online (Sandbox Code Playgroud) 我有一个应用程序试图在其构造函数中加载一些预期的注册表设置.
如果无法加载这些(基本的,不可违约的)注册表设置,那么从BCL抛出最合适的.NET异常是什么?
例如:
RegistryKey registryKey = Registry.LocalMachine.OpenSubkey("HKLM\Foo\Bar\Baz");
// registryKey might be null!
if (registryKey == null)
{
// What exception to throw?
throw new ???Exception("Could not load settings from HKLM\foo\bar\baz.");
}
Run Code Online (Sandbox Code Playgroud) 考虑下面的控制台应用程序,其特色是具有捕获类型异常的通用catch处理程序的方法TException
.
当使用"调试"配置构建此控制台应用程序并在Visual Studio调试器下执行时(即通过*.vshost.exe),这在Visual Studio 2005和Visual Studio 2008中都会失败.
我相信这个问题只是在我安装Visual Stuido 2008之后才出现的.
using System;
class Program
{
static void Main()
{
Console.WriteLine(Environment.Version);
CatchAnException<TestException>();
Console.ReadKey();
}
private static void CatchAnException<TException>()
where TException : Exception
{
Console.WriteLine("Trying to catch a <{0}>...", typeof(TException).Name);
try
{
throw new TestException();
}
catch (TException ex)
{
Console.WriteLine("*** PASS! ***");
}
catch (Exception ex)
{
Console.WriteLine("Caught <{0}> in 'catch (Exception ex)' handler.", ex.GetType().Name);
Console.WriteLine("*** FAIL! ***");
}
Console.WriteLine();
}
}
internal class TestException : Exception
{
} …
Run Code Online (Sandbox Code Playgroud) 是否可以SelectNodes()
调用a XmlDocument
返回null?
我的困境是我试图达到100%的单元测试代码覆盖率; ReSharper告诉我,我需要防止该SelectNodes()
方法的null返回,但我看不出XmlDocument可以返回null(因此,无法测试我的guard子句并达到100%的单元测试覆盖率!)
我在MSBuild中有一个后期构建目标来复制一些构建输出.
这是作为对AfterBuild
目标的依赖关系(公开Microsoft.CSharp.targets
):
<Target Name="AfterBuild" DependsOnTargets="InstallUtil;CopyPostBuildFiles" />
Run Code Online (Sandbox Code Playgroud)
如果构建实际上没有重新构建,有没有办法避免文件被复制?
例如,当MSBuild依赖关系分析声明项目不需要构建因为它的源文件都没有更新时,它不会构建,但仍然执行我的复制目标.有什么方法可以防止这种情况吗?
我有一个批处理文件,使用该exit
命令返回退出代码.
在某些情况下,可以从命令行交互地调用此批处理文件,或者在其他情况下,可以使用该Exec
任务作为MSBuild项目的一部分运行该批处理文件.
exit %errorlevel%
在我的批处理文件中使用这很好,并且MSBuild看到错误代码,但是在这种情况下,从命令窗口运行批处理文件的交互式用户将获得cmd.exe的粗略退出.exit /b %errorlevel%
交互式场景没有得到粗鲁的退出,但这也意味着cmd
我的Exec
任务启动也没有退出,因此MSBuild没有看到返回值.作为这两个问题的解决方案,我试图使用exit /b
但是从我的构建脚本中启动批处理文件,如下所示:
<Exec Command="Batch.cmd params & exit %errorlevel%" />
Run Code Online (Sandbox Code Playgroud)
这个想法是我明确地从'非终端'返回exit /b
并手动调用exit
以cmd.exe
在Exec
Build Task可以看到它之外传播这个值.
这似乎是完美的解决方案,但它不起作用.Exec
仍然没有得到正确的错误值.
有没有办法检索运行当前python脚本的可执行文件的路径(从python脚本中)?
我有一个非常简单的测试脚本,只是为了学习pytest,tmp.py:
def square(x):
return x*x
def test_square():
assert square(4) == 16
Run Code Online (Sandbox Code Playgroud)
使用Pycharm来运行这个脚本,我已经配置了我的项目设置,使得pytest被用作我的默认测试运行器.当我运行上面的代码时,我收到以下错误:
/Users/mingxiao/webdav_2.7.5/bin/python /Applications/PyCharm.app/helpers/pycharm/pytestrunner.py -p pytest_teamcity /Users/mingxiao/dev/juggernaut/src/integrations/webDAV/demo/tmp.py "-k test_square"
Testing started at 4:41 PM ...
Traceback (most recent call last):
File "/Applications/PyCharm.app/helpers/pycharm/pytestrunner.py", line 51, in <module>
main()
File "/Applications/PyCharm.app/helpers/pycharm/pytestrunner.py", line 20, in main
_pluginmanager = PluginManager(load=True)
TypeError: __init__() got an unexpected keyword argument 'load'
Process finished with exit code 1
Run Code Online (Sandbox Code Playgroud)
我正在运行PyCharm 3.0专业版,pytest 2.4.2和python 2.7.5.似乎它的PyCharm本身就是造成这个问题的原因.
.net ×5
c# ×4
msbuild ×2
python ×2
assemblies ×1
batch-file ×1
deprecated ×1
interface ×1
java ×1
msbuild-task ×1
native ×1
overriding ×1
pycharm ×1
pytest ×1
resharper ×1
unit-testing ×1
unmanaged ×1
xml ×1