使用VS13在C#中声明变量时出现奇怪错误

使用VS13在C#中声明变量时出现奇怪错误,c#,excel,visual-studio-2010,visual-studio,visual-studio-2013,C#,Excel,Visual Studio 2010,Visual Studio,Visual Studio 2013,所以我导入了office库,我说使用Microsoft.office.Interop导入 我正在尝试创建一个方法来检查Excel工作簿是否打开。由于这个错误,我还没有取得任何进展 当我声明Excel.Application exApp时它表示找不到类型或命名空间名称“excel” 它说我需要声明它是Microsoft.Office.Interop.Excel.Application exApp 我真的不认为我做错了什么。。。我的导入没有错误 using Microsoft.Office.Inte

所以我导入了office库,我说使用Microsoft.office.Interop导入

我正在尝试创建一个方法来检查Excel工作簿是否打开。由于这个错误,我还没有取得任何进展

当我声明
Excel.Application exApp时它表示找不到类型或命名空间名称“excel”

它说我需要声明它是
Microsoft.Office.Interop.Excel.Application exApp

我真的不认为我做错了什么。。。我的导入没有错误

using Microsoft.Office.Interop;

namespace Month_End_Closing
{
    public partial class Step1Form : Form
    {
        public Step1Form()
        {
            InitializeComponent();
        }

        static bool IsOpened(string wbook)
        {
            bool isOpened = true;
            Excel.Application exApp;

            return isOpened;
        }
    }
}

使用
指令不是这样工作的。您不能使用指令在
中提供部分命名空间名称,然后在其他地方提供其余名称

根据C#5规范第9.4.2节:

using namespace指令将名称空间中包含的类型导入到直接封闭的编译单元或名称空间体中,从而使每个类型的标识符可以在没有限定的情况下使用

using namespace指令导入给定名称空间中包含的类型,但不导入嵌套名称空间

例如,这是无效的:

using System;
...

Console.WriteLine(IO.File.Exists("foo"));
所以你可以写:

using Microsoft.Office.Interop.Excel;
然后:

Application exApp;
Excel.Application exApp;
假设
应用程序
在其他方面是明确的。(听起来好像不是你的情况。)或者你可以使用别名:

using Excel = Microsoft.Office.Interop.Excel;
然后:

Application exApp;
Excel.Application exApp;

使用
指令不是这样工作的。您不能使用指令在
中提供部分命名空间名称,然后在其他地方提供其余名称

根据C#5规范第9.4.2节:

using namespace指令将名称空间中包含的类型导入到直接封闭的编译单元或名称空间体中,从而使每个类型的标识符可以在没有限定的情况下使用

using namespace指令导入给定名称空间中包含的类型,但不导入嵌套名称空间

例如,这是无效的:

using System;
...

Console.WriteLine(IO.File.Exists("foo"));
所以你可以写:

using Microsoft.Office.Interop.Excel;
然后:

Application exApp;
Excel.Application exApp;
假设
应用程序
在其他方面是明确的。(听起来好像不是你的情况。)或者你可以使用别名:

using Excel = Microsoft.Office.Interop.Excel;
然后:

Application exApp;
Excel.Application exApp;


你有对适当程序集的引用吗?@JonSkeet:如果他没有引用,他不会在使用Microsoft.Office.Interop的
语句时得到错误吗?@AlexFarber我已经添加了它。。。你没有读过帖子吗…@TonyVitabile这就是我有点困惑的原因。@TonyVitabile:不一定-可能有不同的程序集贡献给该命名空间(例如,一个用于Word,但不是Excel)。你有对相应程序集的引用吗?@JonSkeet:如果他没有引用,他不会在使用Microsoft.Office.Interop的
语句中得到错误吗?@AlexFarber我已经添加了它。。。你没有读过帖子吗…@TonyVitabile这就是为什么我有点困惑的原因。@TonyVitabile:不一定-可能有不同的程序集贡献给该命名空间(例如,一个用于Word,但不用于Excel)所以我现在仍然很困惑,为什么我不能使用Microsoft.Office.Interop
,然后声明说
Excel.Application
。按照同样的逻辑,这不等于使用Microsoft.Office.Interop.Excel
然后使用
应用程序
?@metsales:不,不是。因为
Microsoft.Office.Interop.Excel
是一个完整的命名空间名称。
using
指令列出了要在其中查找类型的名称空间。。。它没有提供某种层次结构。实际上,你的语法也不起作用。我得到的错误是,必须使用别名来完成。因为我在
Forms.Application
Excel.Application
之间得到了一个模糊的引用。我知道当我在VB中执行此操作时,我使用
Excel.Application
声明issues@metsales:您的示例代码没有针对
System.Windows.Forms
使用
指令的
,因此没有歧义。你不能期望我对你没有提供的代码做出反应。。。如果需要解决歧义,请使用答案底部的别名方法。我对答案进行了编辑,加入了一个规范参考,进一步说明了这一点。(很抱歉——我认为这个问题不值得列出我拥有的其他12个导入…)别名实际上工作得很好。这是一种“正确”的方法吗:
使用Excel=Microsoft.Office.Interop.Excel.Application
,还是有点草率?所以我现在仍然不明白为什么我不能说
使用Microsoft.Office.Interop
,然后声明说
Excel.Application
。按照同样的逻辑,这不等于使用Microsoft.Office.Interop.Excel
然后使用
应用程序
?@metsales:不,不是。因为
Microsoft.Office.Interop.Excel
是一个完整的命名空间名称。
using
指令列出了要在其中查找类型的名称空间。。。它没有提供某种层次结构。实际上,你的语法也不起作用。我得到的错误是,必须使用别名来完成。因为我在
Forms.Application
Excel.Application
之间得到了一个模糊的引用。我知道当我在VB中执行此操作时,我使用
Excel.Application
声明issues@metsales:您的示例代码没有针对
System.Windows.Forms
使用
指令的
,因此没有歧义。你不能期望我对你没有提供的代码做出反应。。。如果需要解决歧义,请使用答案底部的别名方法。我对答案进行了编辑,加入了一个规范参考,进一步说明了这一点。(很抱歉——我认为这个问题不值得列出我拥有的其他12个导入…)别名实际上工作得很好。这是一种“正确”的方式吗: