我们目前正在重组我们的一些服务项目,因此他们的命名更符合逻辑.我们有以下结构:
Djp.Services.类型.服务名称
这似乎是一个逻辑分组有意义,但我想知道的是,根据项目中的文件夹,在此基础上有更多级别是可以接受的.例如,调用一个项目
Djp.Services.Management.Data
在这个项目下,我们有一个"POCO"文件夹和一个"Repositories"文件夹,这意味着,这些文件夹下的对象原则上将有5个级别的命名空间.
命名空间的深度是应该避免的,还是完全合理的?
我是StyleCop的忠实粉丝,它让我的生活更轻松.其他一些人都想到了很好的规则,我很乐意通过启用StyleCop来关注它们.最近我一直在搞乱Coded Ui的可扩展性,并且发现了这篇文章:
http://blogs.msdn.com/b/gautamg/archive/2010/01/05/2-hello-world-extension-for-coded-ui-test.aspx
下面的示例代码使StyleCop不满意,因为using语句在命名空间之外.但是,我只能移动两个System*包 - 第三个是定义一个程序集属性,我不能扔进assembly:一个命名空间.
是否有一种干净的方式来重新组织此代码?
using System;
using System.Diagnostics;
using Microsoft.VisualStudio.TestTools.UITest.Common;
using Microsoft.VisualStudio.TestTools.UITest.Extension;
// Attribute to denote that this assembly has UITest extensions.
[assembly: UITestExtensionPackageAttribute("HelloWorldPackage",
typeof(UITestHelloWorldPackage.HelloWorldPackage))]
namespace UITestHelloWorldPackage
{
internal class HelloWorldPackage : UITestExtensionPackage
{
public override object GetService(Type serviceType)
{
Trace.WriteLine("Hello, World");
return null;
}
....
Run Code Online (Sandbox Code Playgroud) 我们的团队最近已从Visual Studio 2008/.NET3.5迁移到Visual Studio 2010/.NET4.0.现在,VS2010给了我一个奇怪的错误信息.它可以通过以下程序重现:
using System;
namespace Some.Main
{
}
namespace SomeLib
{
interface Some
{
}
}
namespace ConsoleApplication1
{
using Some.Main;
using SomeLib;
class Program
{
static void Main(string[] args)
{
Console.Write("Press enter to continue");
Console.ReadLine();
}
}
}
Run Code Online (Sandbox Code Playgroud)
这在VS2008中运行得很好,但在VS2010中我收到以下错误消息:
"SomeLib.Some"类型中不存在类型名称"Main"
有趣的是,如果我点击"构建解决方案",该程序构建得很好,我甚至可以毫无问题地执行它.它只是Visual Studio,似乎有这个代码的问题.
不幸的是,我正在研究一个大型遗留应用程序,我不能(轻松地)更改这些名称空间的名称.
我想知道如何解决这个错误,我也很好奇是什么导致它.
我注意到一些C#代码在命名空间中而不是在文件顶部有using语句.例如,而不是这样:
using System;
namespace SomeClassNameSpace
{
public class SomeClass
{ }
}
Run Code Online (Sandbox Code Playgroud)
他们有这个:
namespace SomeClassNameSpace
{
using System;
public class SomeClass
{ }
}
Run Code Online (Sandbox Code Playgroud)
这是个人偏好的问题,还是有理由在命名空间标记内部或外部使用语句?
这有点怪异.
我在想某个地方必须有一个设置可以解释为什么会这样.
在我们的解决方案中,大约有50个不同的项目 在大多数情况下,库以命名空间OurCompany开头.
我们有OurComany.This.That和OurCompany.Foo.Bar ...等
外部库与命名空间之间存在命名空间/类冲突
OurCompany.Foo.Bar
Run Code Online (Sandbox Code Playgroud)
还有一个合格的班级......
OurCompany.Some.Location.Foo
Run Code Online (Sandbox Code Playgroud)
错误是这样的:
Error 75 The type or namespace name 'MethodName' does not exist in the
namespace 'OurCompany.Foo' (are you missing an assembly reference?)
Run Code Online (Sandbox Code Playgroud)
当我完全限定"OurCompany"命名空间下的任何内容时,甚至Resharper都会给我一个"Qualifier is redundant"消息.
OurCompany.Some.Location.Foo.MethodName();
//OurCompany is redundant
Run Code Online (Sandbox Code Playgroud)
我无法弄清楚到底是做什么的.解决方案非常庞大,因此试图对问题进行逆向工程并不是很好的解决方案.
我应该说如果我用...
Some.Location.Foo.MethodName(); //Leaving out OurCompany
Run Code Online (Sandbox Code Playgroud)
...... Resharper消息消失了.
当我尝试在 Visual Studio 中运行下面的代码时,我收到以下错误:“程序定义了多个入口点。使用 /main 编译以指定包含入口点的类型。”
我试过寻找其他入口点,但我对 c# 没有那么熟悉,并且遇到了麻烦。据我了解,一切都应该是正确的。
namespace Demos
{
using System;
using System.Drawing;
using Applitools;
using Applitools.Selenium;
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
public class HelloWorld2
{
static string appName = "Hello World 2 App C#";
// change the value of testName so that it has a unique value on your Eyes system
static string testName = "Hello World 2 v1";
// if you have a dedicated Eyes server, set the value of the variable serverURLstr to your URL …Run Code Online (Sandbox Code Playgroud) 在NameSpace或Outside中添加导入有什么区别.加载程序集的方式有区别吗?
Using System;
namespace test
{
}
VS
namespace test
{
using System;
}
Run Code Online (Sandbox Code Playgroud) 引用某些方法时,可以使用using或显式键入整个命名空间.使用一种方法比另一种方法有任何速度优势,还是只是简单地输入整个命名空间?谢谢
我以为我读到某个地方,订购你的使用陈述并摆脱未使用的陈述有一些性能上的好处......但我似乎无法找到任何证据或资源来支持这个......这有什么道理吗?
当我在C#中创建一个新的类文件时,通常的结构如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace UnitTest
{
class Class1
{
}
}
Run Code Online (Sandbox Code Playgroud)
StyleCop不喜欢在命名空间之外使用指令,所以理想情况下,我会重构我的代码:
namespace UnitTest
{
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
class Class1
{
}
}
Run Code Online (Sandbox Code Playgroud)
从我作为Java程序员的日子开始,我被告知最好只导入必要的引用,而不是像这样导入整个包:
import foo.bar.MyObject;
Run Code Online (Sandbox Code Playgroud)
代替
import foo.bar.*;
Run Code Online (Sandbox Code Playgroud)
我知道这也可以在C#中完成,增加的功能是你可以为类型使用别名(有时在使用本机代码时很有用):
using StringBuilder = System.Text.StringBuilder;
Run Code Online (Sandbox Code Playgroud)
或使用别名时:
using HANDLE = System.IntPtr;
using HDC = System.IntPtr;
Run Code Online (Sandbox Code Playgroud)
关于使用指令的最佳实践和效率,我的问题是:
我正在尝试在 Visual Studio 2019 中创建自定义模板项目。在我的模板中,项目指令应该位于命名空间内。在编码时我把它们放在里面。但是当项目生成时,我在外面看到它们(我的代码被覆盖)。
如何让 Visual Studiousing在使用自定义项目模板创建的每个新项目的命名空间中放置语句?
c# ×10
namespaces ×6
using ×6
.net ×4
stylecop ×2
.net-4.0 ×1
applitools ×1
coding-style ×1
performance ×1
qualifiers ×1
selenium ×1
ui-testing ×1