Лямбда-функция - анонимная функция, которую вы создаете в строке. Он может захватывать переменные, как объясняли некоторые (например, http://www.stroustrup.com/C++11FAQ.html#lambda ), но есть некоторые ограничения. Например, если есть интерфейс обратного вызова, подобный этому,
void apply(void (*f)(int)) {
f(10);
f(20);
f(30);
}
, вы можете написать функцию на месте, чтобы использовать ее как переданную для применения ниже:
int col=0;
void output() {
apply([](int data) {
cout << data << ((++col % 10) ? ' ' : '\n');
});
}
Но вы не можете этого сделать:
void output(int n) {
int col=0;
apply([&col,n](int data) {
cout << data << ((++col % 10) ? ' ' : '\n');
});
}
из-за ограничений в стандарте C ++ 11. Если вы хотите использовать захваты, вам нужно полагаться на библиотеку и
#include
(или какую-либо другую библиотеку STL, такую как алгоритм, чтобы получить ее косвенно), а затем работать с std :: function, а не передавать нормальные функции как такие параметры:
#include
void apply(std::function f) {
f(10);
f(20);
f(30);
}
void output(int width) {
int col;
apply([width,&col](int data) {
cout << data << ((++col % width) ? ' ' : '\n');
});
}
На основе Вашего доказательства я предположил бы, что ссылка на то, какой бы ни блок содержит MyApplicationFramework.Profile.EmployeeSearchCriteria
, отсутствует или в проекте модульного теста или в веб-проекте - хотя я действительно думал бы, что Вы только потребуете ссылки в веб-проекте, но я не хорошо осведомлен о том, как веб-сервер VS ведет себя, когда используется в качестве части модульного теста.
Я столкнулся с той же проблемой с поблочным тестированием. И найденный проблемной причиной и также решают его. Проблема только с правами доступа для каталога.
В моем случае я установил VSTS на различном диске (d) тогда значение по умолчанию. Таким образом, только, чтобы дать права полного доступа пользователю PCNAME\ASPNET для целого каталога \Program Files\Microsoft Visual Studio 9.0 .
я m использование Windows XP, но если Вы используете сервер окна тогда, дает права доступа пользователю NetworkServices.
этим решением я решил свою проблему. Надежда u находит что-то полезным из этого Ответа.
Спасибо, Priyesh Patel
Я получал ту же проблему как Вы, однако мой опыт немного отличался.
я нахожусь на перспективе x64, мои разработчики находятся в xp x64... у них не было проблем вообще. Я просто обновил и не мог выполнить модульный тест на проект MVC asp.net. Я получал те же 500 ошибок, которые Вы получали.
я выключил покрытие кода, все волшебно начало работать.
Comment out the whole bit of web.config like this
<!-- <location path="VSEnterpriseHelper.axd">
<system.web>
<authorization>
<allow users="?" />
</authorization>
</system.web> </location> -->
It worked for me
Убедитесь, что ваше веб-приложение ориентировано на Framework 4.0. Если вы пытаетесь протестировать 2.0, 3.0 или 3.5, вы получите (500) Internal Server Error.
Я обнаружил, что при использовании vs2010 я не ограничен только приложениями 4.0. Однако я ДЕЙСТВИТЕЛЬНО обнаружил, что при тестировании веб-приложения и использовании перенаправления старой версии System.Web.Extensions вы можете получить ошибку. Удаление следующего раздела из файла Web.config устранило мою проблему:
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1" appliesTo="v2.0.50727">
<dependentAssembly>
<assemblyIdentity name="System.Web.Extensions" publicKeyToken="31bf3856ad364e35"/>
<bindingRedirect oldVersion="1.0.0.0-1.1.0.0" newVersion="3.5.0.0"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Web.Extensions.Design" publicKeyToken="31bf3856ad364e35"/>
<bindingRedirect oldVersion="1.0.0.0-1.1.0.0" newVersion="3.5.0.0"/>
</dependentAssembly>
</assemblyBinding>
</runtime>
Удачи.
Я столкнулся с похожей проблемой при тестировании веб-сервиса, в котором используется проект .NET 3.51. Я получал ошибку IIS 500. Я удалил старые привязки сборки, как прокомментировал Хэл Диггс, и это сработало.