当Teamcity运行启动自托管Web应用程序的集成测试时,测试将失败并显示错误:
System.MissingMemberException: The server factory could not be located for the given input: Microsoft.Owin.Host.HttpListener
Run Code Online (Sandbox Code Playgroud)
抛出此错误的代码是:
var webApp = WebApp.Start<Startup>("http://*:52203/")
Run Code Online (Sandbox Code Playgroud)
使用Visual Studio(使用Resharper测试运行器)执行测试时运行正常.Teamcity配置为使用JetBrains.BuildServer.NUnitLauncher.exe可执行文件来运行测试.
我看到很多关于这个错误的帖子与Microsoft.Owin.Host.HttpListener.dllbin 有关,因为bin\debug或bin\release文件夹中没有.我可以确认此文件(以及随附的.xml文件)都存在于TeamCity buildAgent使用的bin\release文件夹中.没有bin\debug文件夹.
背景信息(可能相关):
我有一个直接使用第三方 DLL(“库 A”)的 Unity 项目,我已将其添加到项目的 Assets 文件夹中。库 A 依赖于另一个 DLL,即“库 B”,我也将其添加到 Assets 文件夹中。库 B 未被 Unity 项目中的任何脚本使用。库 A 和 B 都是用 C# 编写的,目标是 .NET 4,也就是说,它们都是托管代码。
添加到 Assets 文件夹后,当在 Visual Studio 中打开项目时,库 A 和 B 都列在“参考”下,并且“Copy Local”都设置为“True”(虽然我不知道 Unity 是否使用那个财产)。
但是,在 Unity 编辑器中运行项目时,对库 A 的各种调用都会引发异常,表明库 B 不可用。我能够让它工作的唯一方法是将库 B 的副本放入C:\Program Files\Unity\Editor(包含 Unity.exe 的目录,Unity 编辑器可执行文件)。
我在其他非 Unity 项目中使用过库 A 和 B,并且从未遇到任何问题(只要引用它们,Visual Studio 就会将它们都复制到输出目录中)。我是否缺少告诉它需要库 B 所必需的特定于 Unity 的步骤?
这个问题可能已被多次询问过,也许我只是在使用谷歌的搜索功能以及谷歌这个问题,但我还没有找到这个问题的答案.
我目前有两个项目,项目X,项目Y和项目Z(仅包含映射)
Project X是一个FluentNhibernate项目,它包含我的sessionfactories和类似的东西.所以这也是映射加载和事物的地方(这很重要,我怀疑它可能是我遇到的问题的全部原因)
现在,在Project X中,我引用了一个使用Microsoft.SqlServer.Types.dll的程序集.
项目Y是一个使用项目X进行数据库连接的服务.
所有的probjects都可以在我的开发机器上完美地查找和运行,但是当部署到我们的服务器时,它们无法正常运行(运行时错误).错误是非常模糊的,因为它指向缺少FluentNHibernate程序集,但事实并非如此.
Procmon.exe幸运地显示代码试图加载Microsoft.SqlServer.Types.dll,因为服务器没有安装SQL Server(我的客户端不是,但它有一个管理工作室,很可能安装此.DLL以及) .
到目前为止一直很好,复制了DLL并且它工作了(耶!).
现在我想我将程序集添加到项目X以确保使用项目X将此引用复制到其他项目.这没有发生....所以我尝试将"复制本地"设置设置为true.
遗憾的是,这仍然没有将.dll复制到引用项目Y.
有没有办法让这种情况发生,或者这个Visual Studio是否聪明并且意识到Project Y不需要这个.dll因此拒绝复制它?
(由于Project Z需要实际参考,Project X加载此程序集@运行时,Z和X之间没有"硬"参考)
任何Stackoverflow天才都可以对此有所了解,因为老实说,我想知道为什么它会以这种方式运行(理想情况下是一种让它表现得像我想要的方式).
.net reference visual-studio-2010 fluent-nhibernate .net-assembly
我有一个Web应用程序的解决方案,从webapp我引用另一个引用的项目和外部库.
WebApp -> SupportingProject -> ExternalDll
Run Code Online (Sandbox Code Playgroud)
当我在visual studio中的debug/release中构建解决方案时,一切都很好,但是当它在TeamCity中构建时,其中一个引用不会被复制.除了单个文件之外,复制支持项目引用的所有其他文件.
我能够通过直接添加对该库的引用来解决这个问题,但是想弄清楚它的根本原因.
所有引用都标记为本地副本.
我在teamcity中使用Visual Studio(sln)构建运行器.
当我尝试使用msbuild为Web部署创建一个包时,它只包含项目dll.包zip文件或临时目录不包含引用项目的dll.
我看过这篇文章,这不是我的问题.我肯定使用我正在创建部署包的主项目中引用项目的代码.
我正在使用MSBUILD 4来创建包.
当我使用完全相同的项目文件使用VS2010创建包时,它工作正常.所有引用的项目都将其dll包含在package.zip文件中.
我已经尝试更改_PackageTempDir的位置,但也没有解决问题.
我已经尝试取出ExcludeFilesFromDeployment属性并将PackageAsSingleFile设置为false以查看是否会更改结果.
这是我的Package目标.所有的正则表达式都是这样我可以从搜索路径的末尾拉出我的项目文件名,然后使用该名称作为输出文件夹的名称和zip文件的名称.PackageOutputDir是我要导入的属性.
<Target Name="Package">
<MSBuild Projects="@(PackageProject)" Targets="Package" Properties="Platform=$(Platform);
Configuration=$(Configuration);
DeployOnBuild=true;
DeployTarget=Package;
PackageLocation=$(PackageOutputDir)\$([System.Text.RegularExpressions.Regex]::Split($(ProjectName), '(.*\\)([a-z,A-Z,0-9,_,-]+)(\.\*proj;)')[2])\$([System.Text.RegularExpressions.Regex]::Split($(ProjectName), '(.*\\)([a-z,A-Z,0-9,_,-]+)(\.\*proj;)')[2]).zip;
PackageAsSingleFile=true;
ExcludeFilesFromDeployment=Web.config;
_PackageTempDir=$(PackageOutputDir)\temp;">
</MSBuild>
</Target>
Run Code Online (Sandbox Code Playgroud)
关于为什么它不包括我引用的项目dll的任何想法?
我正在尝试在构建服务器上使用MSBuild命令行构建解决方案。但是,MSBuild不会将任何dll复制到bin文件夹,因此后续目标将失败。
我的解决方案由几个项目组成,其中仅应打包一个项目。该项目引用了应该在之前构建的同一解决方案中的其他项目。
所有引用均<Private>true</Private>在项目文件中设置为。
这是我的MSBuild命令:
Msbuild solution.sln /m /p:BuildInParallel=true /p:VersionNumber=1.2.3.4
"/t:Rebuild" /p:Configuration=Release /p:WebProjectOutputDir=publish\
"/p:GitVersion=abcdef (abcdef)" /p:OutDir=publish\bin\ /p:RunOctoPack=true
Run Code Online (Sandbox Code Playgroud)
当我在Visual Studio(2012或2013)中构建项目时,将创建bin文件夹,并将所有必需的dll复制到bin文件夹。Visual Studio将dll复制到bin文件夹后,MSBuild命令将起作用,直到我更改了任何引用的dll。
我读了一些关于间接引用没有被复制的帖子,但是对我来说,即使直接引用也没有被复制。
我也尝试调用目标,例如ResolveReferences,但总是收到错误消息target ResolveReferences does not exist in the project solution.sln。
有人知道我在做什么错吗?谢谢您的帮助。
我有一个包含多个项目的解决方案。
假设我有项目:
P2是我的启动项目。
我想配置P2并依赖于P4,以便构建P4 ,并将P4和依赖项推送到P2的 bin 文件夹,但我不希望P2的 dll 有对P4的 .net 引用
我通过 csproj 中的特定项目参考部分成功地做到了这一点:
<ProjectReference Include="..\P4\P4.csproj">
<ReferenceOutputAssembly>false</ReferenceOutputAssembly>
<OutputItemType>Content</OutputItemType>
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
<Targets>Build;DebugSymbolsProjectOutputGroup</Targets>
</ProjectReference>
Run Code Online (Sandbox Code Playgroud)
但此解决方案仅添加P4而不是依赖项(P3和N1)
有谁知道该怎么做?
谢谢
msbuild ×4
.net ×3
c# ×3
dependencies ×2
teamcity ×2
bamboo ×1
build ×1
csproj ×1
dll ×1
msbuild-4.0 ×1
owin ×1
reference ×1
self-hosting ×1
vb.net ×1
webdeploy ×1