3

私はここで途方に暮れています。

一番下の再現手順

MyProj.MvcVisual Studio 2012 Update 3 でMVC 4 プロジェクトを作成しました。

ここでの提案に従って、プロジェクトの下GlobalResources.resxのフォルダーに入れResources、DLL にコンパイルされるようにしました。で生成されたコードを確認しましたがGlobalResources.resx.cs、すべて公開されています。.cs他のファイル (例: )からリソースにアクセスできますHomeController.cs

MyProj.Mvcどのビューでも、名前空間を現在のコンテキストにすることはできません。

たとえば、任意の Razor ビューで、次のようなリソースを問題なく参照できます。

@MyProj.Mvc.Resources.GlobalResources.AppName

ただし、次のことをしようとすると:

@Resources.GlobalResources.AppName

エラーが発生します。名前Resources空間が見つかりません。

ここのアドバイスに従い、名前空間を ~/Views/Web.config に入れました。

<add namespace="MyProj.Mvc" />

また、ビューはまだResources名前空間を認識できません。Visual Studio の再構築や再起動が機能しません。

「わかりました」と私は思います@using

@using MyProj.Mvc // put at the top of the page

また、ビューはまだResources名前空間を認識できません。

助けてください。ヘルプ!@usingページの上部にステートメントを配置しても名前空間がスコープに含まれないという、私が間違っている可能性があるのは何ですか?

再現する手順:

これは、まったく新しいクリーンなプロジェクトで再現できました。Visual Studio 2012 Update 3 で、新しい ASP.NET MVC 4 Web アプリケーションを作成し、MyProj.Mvc. テンプレートについては、主に Internet Application に関心がありますが、Empty プロジェクトを使用して自分のマシンでもこれを再現しました。私が持っているものによりよく一致するように、インターネットアプリケーションを選択してください。の上に_Layout.cshtml、 を置き@using MyProj.Mvcます。ページの別の場所で、入力を開始します@Controllers.HomeControllerControllersオートコンプリートは名前空間を提供しようとさえしないことに注意してくださいHomeController

今では奇妙になります:

それで、それは失敗しました。ただし、ここに何かがあります。usingステートメントを に変更してみてください@using MyProj.Mvc.Controllers。ここで、戻って入力を開始します@HomeController。できます!

では、プロジェクトの名前空間がビューの範囲に入らないほど特別な理由は何ですか?

4

1 に答える 1

1

名前空間へのアクセス方法を誤解していると思います。

コードで名前空間を参照するからといって、その名前空間の名前空間に直接アクセスできるわけではありません。

たとえば、これを試してください:

MyDemoClass次のように呼び出される新しい C# クラスを作成します。

using System.Web;

public class MyDemoClass
{
    Mail.MailMessage // can't do this
}

System.Web.Mailこれが名前空間であり、アクセスできることがわかっていることに注意してください。しかし、using System.Webだからといって、自分のコードに飛び込んで と入力できるわけではありませんMail.<etc>。コンパイラは私が何を望んでいるのかわかりません。幸いなことに、それは提案するのに十分賢いです

Do you mean:
    System.Net.Mail
    System.Web.Mail

そのためusing MyProj.Mvc.Controllers、コントローラー クラスにアクセスしてアクセスすることはできますが、単純using MyProj.Mvcにそこから名前空間にアクセスしようとすることはできませんControllers。うまくいきません。

これが、これが多く見られる理由でもあります。

using System;
using System.Web;
using System.Web.Mvc;
using System.Web.Mvc.Html;

これの代わりに:

using System;
using Web;
using Mvc;
using Html;

冗長に感じますが、それが現状です。

最後の名前空間が参照されていることを確認してください。Resourcesが名前空間の場合は、それを指定usingするか、 に追加する必要がありますWeb.config

于 2013-08-06T02:03:26.490 に答える