ASP.NET MVC: файлы, содержащие методы расширения внутри App_Code, должны иметь действие сборки «Нет»? - PullRequest
0 голосов
/ 04 июля 2010

Кажется, это единственное, что работает:

  • Если файл .cs находится внутри App_Code ...
    • И не содержит методов расширения: установите действие сборкиСкомпилировать";в противном случае никакой другой исходный код в проекте не знает о его существовании.
    • И содержит методы расширения: установите для действия сборки значение "Нет";в противном случае вы получите ошибку, что ссылка на x.Foo является неоднозначной между MyExtensions.Foo и MyExtensions.Foo.
  • Если файл .cs находится вне App_Code, внутри папки с именем Helpers,для него должно быть установлено действие сборки «Compile» независимо от того, содержит ли оно методы расширения.

Я не понимаю этого поведения.Я не был уверен, что ASP.NET MVC содержал какие-либо специальные привилегии для App_Code, но похоже, что он делает ... но только в том смысле, что он автоматически компилирует метод расширения, содержащий файлы .cs, даже когда действие сборкиустановить на "Нет" ??Кто-нибудь, пожалуйста, объясните.

1 Ответ

0 голосов
/ 04 июля 2010

Я предполагаю, что вы создали проект веб-приложения, а не проект веб-сайта. Папка App_Code в приложении ASP.NET является особенной. Он предназначен для того, чтобы вы могли вставить код, чтобы он был скомпилирован с веб-сайтом. Из-за этого элементы проекта помечаются как «Нет», чтобы они не компилировались Visual Studio. Когда вы публикуете проект веб-сайта в вашей размещенной среде, сами файлы кода копируются в папку App_Code, и это компилируется в отдельную сборку во время выполнения ASP.NET.

Теперь, когда вы создаете веб-приложение MVC, вы должны помнить, что это не тот же тип проекта, что и у проекта веб-сайта. Веб-приложение MVC будет компилироваться локально в сборку в каталоге / bin. Если вы добавите в свой проект папку App_Code с вашим кодом и измените тип сборки на Compile, у вас возникнут проблемы, потому что:

  1. Ваше приложение MVC скомпилировано и содержит тип MyExtensions.Foo и,
  2. ASP.NET компилирует папку App_Code, которая также имеет тип MyExtensions.Foo.

Моя рекомендация - избегать использования App_Code. Я не склонен, поскольку я предпочитаю более краткую структуру проекта. Используйте папку Models для кода или создайте другие папки .....

Если вы действительно хотите использовать папку App_Code, может быть лучше пометить действие сборки любого из файлов как «Содержимое», чтобы гарантировать, что они будут скопированы в выходной каталог при публикации вашего сайта.

...