.net “系统.缺少成员异常:无法找到服务器工厂”启动TeamCity中的Microsoft.Owin自托管

q9yhzks0  于 2022-12-20  发布在  .NET
关注(0)|答案(3)|浏览(156)

当Teamcity运行启动自托管Web应用程序的集成测试时,测试失败并显示错误:

System.MissingMemberException: The server factory could not be located for the given input: Microsoft.Owin.Host.HttpListener

引发此错误的代码为:

var webApp = WebApp.Start<Startup>("http://*:52203/")

在Visual Studio中(使用Resharper测试运行程序)执行时,测试运行正常。Teamcity配置为使用JetBrains.BuildServer.NUnitLauncher.exe可执行文件运行测试。
我看到很多关于此错误的帖子都与有关,因为bin\debug或bin\release文件夹中不存在Microsoft.Owin.Host.HttpListener.dll。我可以确认此文件(以及附带的.xml文件)都存在于TeamCity buildAgent使用的bin\release文件夹中。bin\debug文件夹不存在。

tez616oj

tez616oj1#

我也有同样的问题:在本地运行良好,但在TeamCity代理上失败。
我的测试项目通过nuget引用了Microsoft.Owin.Host.HttpListener
对我有效的方法是在启动Web应用程序之前显式加载Microsoft.Owin.Host.HttpListener dll。

// load assembly
AppDomain.CurrentDomain.Load(typeof(Microsoft.Owin.Host.HttpListener.OwinHttpListener).Assembly.GetName());
wbgh16ku

wbgh16ku2#

我找到了这个问题的解决方案,我希望它有帮助:

var url = "https://example.com";
var options = new StartOptions(url);
options.ServerFactory = typeof(OwinServerFactory).AssemblyQualifiedName;
myHost = WebApp.Start<Startup>(options);

它无需将 Microsoft.Owin.Host.HttpListener.dll 复制到bin目录即可工作。

oewdyzsn

oewdyzsn3#

我在我的Powershell脚本中遇到了这个问题,该脚本迭代我们所有的解决方案,并使用MSBuild构建它们,然后在所有测试项目上调用MSTest。该脚本用于在提交到TFS之前在本地构建和测试所有解决方案。在VS中运行测试时不会出现这个问题。我相信这与this question有关。
在测试初始化过程中,将以下代码放在调用WebApp.Start(“http://*:52203/”)之前。

// This uber silly code is needed to ensure the Owin HttpListener assembly 
// is properly copied to the output directory by using it, utterly redonkulous.
var uberSillyNecessity = typeof(OwinHttpListener);
if (uberSillyNecessity != null) { }

相关问题