В соответствии с вашими этапами воспроизведения я предположил, что изменение пути вывода в свойстве приложения было вашим единственным изменением после создания приложения. Единственное, что делает это изменение, - это то, что он сообщает Visual Studio о переносе выходных сборок MSBuild в новую папку. Однако во время выполнения ASP.Net не имеет представления, что он должен загружать сборки из этой новой папки вместо папки \ bin.
Этот ответ показывает способ изменения выходного каталога сборки приложения WebApi. Чтобы получить ту же самую ошибку, обнаруженную в этом сообщении, вам нужно прокомментировать весь файл & lt; system.codedom & gt; в web.config. И затем вы можете следовать инструкциям по изменению выходного пути.
После того, как вы приступите к работе вашего приложения, вы можете разоблачить & lt; system.codedom & gt; раздел. Если вы не используете новый синтаксис C # 6 в своем приложении, вы можете удалить из приложения приложение Microsoft.CodeDom.Providers.DotNetCompilerPlatform; в противном случае вы можете добавить следующую следующую команду в событие post-build,
xcopy /Q /Y "$(TargetDir)roslyn\*.*" "$(TargetDir)..\roslyn\"
. Новый поставщик CodeDom всегда ищет папку \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \. Вышеупомянутая команда работает как обходной путь и копирует папку\roslyn из вашей новой выходной папки в \ bin.
В моих экспериментах инструмент публикации Visual Studio, однако, опубликовал выходные сборки в папке \ bin в месте развертывания независимо от моего пути выходного пути. Я предполагаю, что ваше приложение все равно должно работать над фактическим развертыванием.
Анонимные типы не имеют никакого отношения к дизайну систем или даже на уровне класса. Они - инструмент для разработчиков для использования при кодировании.
я даже не рассматриваю анонимные типы как серовато-синие типы. Я использую их главным образом в качестве уровня метода анонимные кортежи. Если я запрашиваю базу данных и затем управляю результатами, я создал бы анонимный тип и использовал бы это, а не объявил бы совершенно новый тип, который никогда не будет использоваться или известен за пределами объема моего метода.
, Например:
var query = from item in database.Items
// ...
select new { Id = item.Id, Name = item.Name };
return query.ToDictionary(item => item.Id, item => item.Name);
Никто не заботится о 'a, анонимный тип. Это там, таким образом, Вы не должны объявлять другой класс.
Самое популярное использование анонимных типов для определения проекций в LINQ к SQL-запросу.
Этот запрос
from x in db.Table1 select new {x.Column1, Alias2=x.Column2}
будет преобразован в этот SQL:
SELECT Column1, Column2 AS Alias2 FROM Table1
С анонимными типами, можно создать специальные проекции, не определяя тип для него заранее. Компилятор определит тип для Вас.
От LINQ в действии (раздел страницы 76 2.6.3):
... анонимные типы [являются] большим инструментом для быстрых и простых временных результатов. Мы не должны объявлять, что классы содержат временные результаты благодаря временным типам.
в основном они полезны для содержания информации в локальном объеме временно. Что-либо больше требует использования отражения и может стать настоящей проблемой. Пример, который они дают в вышеназванной книге, состоит в том, чтобы в письменной форме подключиться с консоли к идентификатору, имени и объему памяти, поднятому каждым рабочим процессом. Они создают анонимный тип, добавляют его к списку (весь один оператор) и затем используют ObjectDumper для вывода его. Поэтому для кода больше не нужен отдельно заявленный класс для содержания идентификатора, имени и используемой памяти, но все объявленные неявно переводом в нерабочее состояние количества строки к 4:
var pl = new List<Object>();
foreach(var p in Process.GetProcesses())
pl.Add(new {p.Id, p.ProcessName, Memory=p.WorkingSet64});
ObjectDumper.Write(pl);
Когда Вы создаете типы для 'Использования и броска' цели. Это, кажется, наступило к LINQ. Кажется, способ создать структуры с полями на лету для запроса LINQ. Возврат структуры/типа с указанными полями только. Если бы не это необходимо было бы объявить тип .NET для каждой уникальной комбинации полей, которые Вы хотите получить.
Важно знать, что LINQ не вынуждает Вас, для использования анонимных типов. Можно также записать конструкции обычного объекта после выбора.
var query = from item in database.Items
// ...
select new Person(item.id, item.Name)
Это предотвращает Вас от ужасного отражательного программирования.
@Wouter:
var query = from item in database.Items
select new Person
{
ID =item.id,
NAME= item.Name
};
где ID и NAME являются недвижимым имуществом вашего класса Person.