相关疑难解决方法(0)

命名空间 - 深度太深

我们目前正在重组我们的一些服务项目,因此他们的命名更符合逻辑.我们有以下结构:

Djp.Services.类型.服务名称

这似乎是一个逻辑分组有意义,但我想知道的是,根据项目中的文件夹,在此基础上有更多级别是可以接受的.例如,调用一个项目

Djp.Services.Management.Data

在这个项目下,我们有一个"POCO"文件夹和一个"Repositories"文件夹,这意味着,这些文件夹下的对象原则上将有5个级别的命名空间.

命名空间的深度是应该避免的,还是完全合理的?

.net c# namespaces

5
推荐指数
2
解决办法
1865
查看次数

导入语句的C#位置,使得StyleCop感到高兴

我是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)

c# coding-style using stylecop

5
推荐指数
2
解决办法
323
查看次数

'YZ'类型中不存在类型'X'

我们的团队最近已从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,似乎有这个代码的问题.

不幸的是,我正在研究一个大型遗留应用程序,我不能(轻松地)更改这些名称空间的名称.

我想知道如何解决这个错误,我也很好奇是什么导致它.

.net c# compiler-errors .net-4.0

5
推荐指数
1
解决办法
5422
查看次数

为什么在C#中将using语句放在命名空间中?

我注意到一些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)

这是个人偏好的问题,还是有理由在命名空间标记内部或外部使用语句?

c# namespaces using

5
推荐指数
1
解决办法
6430
查看次数

C#:为什么第一个命名空间是多余的?

这有点怪异.

我在想某个地方必须有一个设置可以解释为什么会这样.

在我们的解决方案中,大约有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消息消失了.

c# namespaces projects-and-solutions qualifiers

5
推荐指数
1
解决办法
418
查看次数

程序定义了多个入口点?CS0017 main() 有问题吗?

当我尝试在 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)

c# selenium ui-testing applitools

4
推荐指数
2
解决办法
8915
查看次数

使用命名空间和加载

在NameSpace或Outside中添加导入有什么区别.加载程序集的方式有区别吗?

Using System;
namespace test
{

}
VS
namespace test
{
using System;

}
Run Code Online (Sandbox Code Playgroud)

c#

3
推荐指数
1
解决办法
430
查看次数

"使用"是否具有任何优势?

引用某些方法时,可以使用using或显式键入整个命名空间.使用一种方法比另一种方法有任何速度优势,还是只是简单地输入整个命名空间?谢谢

c# namespaces using

3
推荐指数
1
解决办法
320
查看次数

c#使用命名空间语句排序

我以为我读到某个地方,订购你的使用陈述并摆脱未使用的陈述有一些性能上的好处......但我似乎无法找到任何证据或资源来支持这个......这有什么道理吗?

.net c# performance namespaces using

3
推荐指数
2
解决办法
3917
查看次数

可以"使用<namespace>;" 指令在.NET中更有效率?

当我在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)

关于使用指令的最佳实践和效率,我的问题是:

  1. 是否更有效地在命名空间中使用语句,或者这纯粹是一种风格偏好?
  2. 如果只包含必要的项目更有效,而不是整个命名空间?

.net c# namespaces using stylecop

2
推荐指数
1
解决办法
462
查看次数

“using”指令位于命名空间内

我正在尝试在 Visual Studio 2019 中创建自定义模板项目。在我的模板中,项目指令应该位于命名空间内。在编码时我把它们放在里面。但是当项目生成时,我在外面看到它们(我的代码被覆盖)。

如何让 Visual Studiousing在使用自定义项目模板创建的每个新项目的命名空间中放置语句?

using using-directives visual-studio visual-studio-2019

1
推荐指数
1
解决办法
1295
查看次数