C# 在命令行上告诉OwinHost如何在项目外部用cwd加载OwinSetup类

C# 在命令行上告诉OwinHost如何在项目外部用cwd加载OwinSetup类,c#,asp.net,.net,asp.net-web-api2,owin,C#,Asp.net,.net,Asp.net Web Api2,Owin,如果您的cwd在项目根目录中,即 c:/code/myprojectroot>。/location/of/owinhost.exe 当您从项目根目录开始工作时,只要您的项目中有[assembly:OwinStartup(typeof(myowistartupclass))],OwinHost似乎非常乐意自动神奇地找到您的类 但是,如果您试图在构建脚本或其他cwd不是项目根目录的情况下执行此操作,那么OwinHost对您来说就不是那么好了,命令行args暗示您可以告诉它您的项目所在的位置: c:/

如果您的cwd在项目根目录中,即

c:/code/myprojectroot>。/location/of/owinhost.exe

当您从项目根目录开始工作时,只要您的项目中有
[assembly:OwinStartup(typeof(myowistartupclass))]
,OwinHost似乎非常乐意自动神奇地找到您的类

但是,如果您试图在构建脚本或其他cwd不是项目根目录的情况下执行此操作,那么OwinHost对您来说就不是那么好了,命令行args暗示您可以告诉它您的项目所在的位置:

c:/not/project/root>location/of/owinhost.exe-d“path/to/project/root”

不管怎么做,它总是告诉你肮脏的谎言,比如:

从默认端口开始:5000(http://localhost:5000/)
错误:System.EntryPointNotFoundException
尝试加载应用程序时发生以下错误。
-未找到包含OwinStartupAttribute的程序集。

因此,我尝试了以下方法:

  • c:/not/project/root>location/of/owinhost.exe-d“path/to/project/root”myowistartupclass
  • c:/not/project/root>location/of/owinhost.exe-d“path/to/project/root”MyNamespace.myowistartupclass
  • c:/not/project/root>location/of/owinhost.exe-d“path/to/project/root”MyNamespace.MyWinStartupClass,MyAssemblyName
  • c:/not/project/root>location/of/owinhost.exe-d“path/to/project/root/bin/Debug”myowistartupclass
  • c:/not/project/root>location/of/owinhost.exe-d“path/to/project/root/bin/Debug”命名空间。myowistartupclass
  • c:/not/project/root>location/of/owinhost.exe“path/to/project/root”
  • c:/not/project/root>location/of/owinhost.exe“path/to/project/root/bin/Debug/my assembly with owin startup in.dll”
什么都不管用,就像OwinHost唯一管用的方法是,如果你用CWD作为你的项目根运行它,那么有人能告诉我哪里出了问题吗?当我给它目录(
-d指定应用程序的目标目录)时,我尝试手动给它DLL,给它上面的任何排列

所以我想不出有谁能告诉我正确的咒语来让它做我想做的事呢?

看看OwinHost,它有以下几行:

ResolveAssembliesFromDirectory(
            Path.Combine(Directory.GetCurrentDirectory(), "bin"));
请注意,它使用目录。GetCurrentDirectory()

这将调用具有
AssemblyResolve
事件的方法

    public static void ResolveAssembliesFromDirectory(string directory)
    {
        var cache = new Dictionary<string, Assembly>();
        AppDomain.CurrentDomain.AssemblyResolve +=
            (a, b) =>
            {
public静态void resolvesassembliesfromdirectory(字符串目录)
{
var cache=newdictionary();
AppDomain.CurrentDomain.AssemblyResolve+=
(a,b)=>
{
因此,它似乎总是从当前目录开始搜索。这可能是您出现问题的原因


修复:提交修补程序以修复OwinHost!(或)编写自己的

您是否尝试过
c:/not/project/root>location/of/OwinHost.exe-d“path/to/project/root/bin/Debug”
(即,未指定启动类)?是的,我也试过了,我已经试过了上面的每一个合理的排列,包括启动类名等等。已经提出了这个问题,但是有人回应说目录位应该有效。