我正在寻找一种方法来本地化PropertyGrid中显示的属性名称.可以使用DisplayNameAttribute属性"覆盖"属性的名称.不幸的是,属性不能有非常量表达式.所以我不能使用强类型资源,例如:
class Foo
{
[DisplayAttribute(Resources.MyPropertyNameLocalized)] // do not compile
string MyProperty {get; set;}
}
Run Code Online (Sandbox Code Playgroud)
我浏览了一下,发现了一些从DisplayNameAttribute继承的建议,以便能够使用资源.我最终会得到如下代码:
class Foo
{
[MyLocalizedDisplayAttribute("MyPropertyNameLocalized")] // not strongly typed
string MyProperty {get; set;}
}
Run Code Online (Sandbox Code Playgroud)
但是我失去了强大的类型资源优势,这绝对不是一件好事.然后我遇到了DisplayNameResourceAttribute,这可能是我正在寻找的.但它应该在Microsoft.VisualStudio.Modeling.Design命名空间中,我找不到我应该为此命名空间添加的引用.
有人知道是否有更好的方法以一种好的方式实现DisplayName本地化?或者是否有使用Microsoft似乎用于Visual Studio的方法?
我想复制一下我的项目.我宁愿不通过添加文件和引用等从头开始这样做.请注意,我不是指复制部署.只是简单的副本.
VS中有工具可以做到这一点吗?我正在使用VS 2008
是否有适用于VS2008的64位Boost库版本?或者我必须自己编译一个?如果,那么,有没有人有经验呢?
我最近一直在构建一个C#的测试框架,我一直在努力.我在我的工作区中设置了NUnit和一个新项目来测试组件.如果我从Nunit(v2.4)加载我的单元测试,一切运行良好,但我已经达到了在调试模式下运行并设置一些断点非常有用的地步.
我已经尝试了几个指南中的建议,这些指南都建议更改测试项目的"Debug"属性:
Start external program: C:\Program Files\NUnit 2.4.8\bin\nunit-console.exe
Command line arguments: /assembly: <full-path-to-solution>\TestDSP\bin\Debug\TestDSP.dll
Run Code Online (Sandbox Code Playgroud)
我在那里使用控制台版本,但也试过调用GUI.当我尝试开始调试时,两者都给出了同样的错误:
Cannot start test project 'TestDSP' because the project does not contain any tests.
Run Code Online (Sandbox Code Playgroud)
这是因为我通常将\ DSP.nunit加载到Nunit GUI中并且这是测试所在的位置吗?
我开始认为问题可能是VS想要运行它自己的测试框架,这就是为什么它没能找到NUnit测试?
编辑:对于那些询问测试装置的人,TestDSP项目中的一个.cs文件看起来大致如下:
namespace Some.TestNamespace
{
// Testing framework includes
using NUnit.Framework;
[TestFixture]
public class FirFilterTest
{
[Test]
public void Test01_ConstructorTest()
{
...some tests...
}
}
}
Run Code Online (Sandbox Code Playgroud)
...我对C#和NUnit测试框架都很陌生,所以我完全有可能错过了一些关键的信息;-)
最终解决方案:最大的问题是我使用过的项目.如果您选择Other Languages -> Visual C# -> Test -> Test Project
...当您选择项目类型时,Visual Studio将尝试使用它自己的测试框架,据我所知.您应该选择一个正常的 C#类库项目,然后我选择的答案中的说明将起作用.
在Visual Studio中,是否有一个窗口显示活动类中的方法列表?像Solution Explorer这样的小窗口会很棒.在Eclipse中,有一个.
尔加!这真的让我今天麻烦.突然没有警告'@'(符号)和'''(双引号)是我键盘上的交易场所,但仅限于Visual Studio 2008!
我似乎无法找到任何帮助或在线解释/补救这一点.是否有一些键盘快捷键我无意中执行了?
我重新启动了我的电脑,它消失了一两个小时然后突然又回来了.
哦,精神错乱:(
有谁知道如何再次获取我的类名和方法名称下拉列表?这是通常在代码之上的下拉列表.这只是一个设置,但我似乎无法找到它.我不想重置我的设置顺便说一句.我不应该这样做.
visual-studio-2005 visual-studio-2008 visual-studio visual-studio-2012 visual-studio-2015
我的解决方案中有2个项目:
我在第一个项目中将测试程序集声明为朋友程序集:
[assembly: InternalsVisibleTo ("Company.Product.Tests")]
Run Code Online (Sandbox Code Playgroud)
一切都很好,直到我意识到我忘记设置解决方案来签署我的程序集.因此创建了一个snk文件并设置了visual studio项目来签署第一个程序集(Basic Library).现在当我编译第一个项目时,我收到以下错误:
朋友汇编参考'Company.Product.Tests'无效.强名称签名程序集必须在其InternalsVisibleTo声明中指定公钥.
我试图使用sn实用程序从我的snk文件中提取公钥,但它生成一个有线二进制文件,我不确定如何使用.我该如何解决这个问题?
以下代码有一个静态方法Foo()
,调用实例方法,Bar()
:
public sealed class Example
{
int count;
public static void Foo( dynamic x )
{
Bar(x);
}
void Bar( dynamic x )
{
count++;
}
}
Run Code Online (Sandbox Code Playgroud)
它编译时没有错误*但在运行时生成运行时绑定程序异常.正如预期的那样,删除这些方法的动态参数会导致编译器错误.
那么为什么有一个动态参数允许编译代码?ReSharper也没有将其显示为错误.
在Visual Studio 2008中编辑1:*
编辑2:添加,sealed
因为子类可能包含静态Bar(...)
方法.即使是密封版本也可以在运行时调用除实例方法之外的任何方法时进行编译.
c# ×4
c++ ×2
attributes ×1
boost ×1
command-line ×1
dynamic ×1
localization ×1
nunit ×1
python ×1
regional ×1
testing ×1
unit-testing ×1