更改WebApi应用程序的构建输出目录

Set*_*lls 11 c# iis asp.net-web-api

我是一个从事大型应用程序的团队的一员.我是这个团队的新成员,正在构建一个新的应用程序.作为此过程的一部分,我创建了一个WebApi应用程序,它将公开一些HTTP端点,通过它我将检索有关该应用程序的信息.

由于条件需要很长时间才能解释,我想让WebApi项目构建在另一个目录中,特别..\bin\Server\Debug\是因为这是应用程序的大多数其他部分构建的地方.我不打扰,除了应用程序试图使用基于工作目录找到的文件,这是我的WebApi应用程序当前错误.

我尝试在项目设置中更改它,现在我收到此错误: 无法加载WebApiApplication类型

到目前为止,我的谷歌搜索引起了一些帮助.有谁知道如何解决这个问题?

ven*_*mit 8

尝试在配置中添加运行时探测路径:

<configuration>
   <runtime>
      <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
         <probing privatePath="bin\server\Debug;"/>
      </assemblyBinding>
   </runtime>
</configuration>
Run Code Online (Sandbox Code Playgroud)

除了上面的步骤并摆脱globa.asax错误.打开Global.asax文件的标记并在顶部添加跟随行.

<%@ Assembly Name="<you_web_app_assembly_name_here>" %>
Run Code Online (Sandbox Code Playgroud)

现在你将开始收到System.web或BindingProvider未找到的错误等.有一些奇怪的解决方法,它开始在汇编标签下添加程序集.

 <compilation debug="true" targetFramework="4.5" optimizeCompilations="false">
      <assemblies>
        <add assembly="Microsoft.AspNet.Identity.Core, Version=2.2.1, PublicKeyToken=31bf3856ad364e35" />
        <add assembly="System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
        <add assembly="System.Web.Abstractions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add assembly="System.Web.Helpers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add assembly="System.Web.Routing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add assembly="System.Web.WebPages, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add assembly="System.Web.Optimization, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
      </assemblies>
</compilation>
Run Code Online (Sandbox Code Playgroud)

你会得到更多这样的错误,但这会让你前进.

原因:我看到的问题是可以选择更改输出路径,但Asp.net会进行即时编译.当您尝试运行网站时,错误与编译相关的原因.某处是文件夹中的run time compilation唯一外观,\bin这就是我们必须指定项目引用的每个程序集的原因.

更新 - 很 遗憾,您无法更改bin目录.看完所有选项并挖掘后发现binAsp.net web项目的文件夹不是普通的二进制输出文件夹.它是一个共享代码文件夹,直接在项目中引用二进制文件.

当Web服务器收到Asp.net应用程序的第一个请求时,将编译二进制文件.并且bin文件夹仅用作共享二进制引用文件夹而不是实际的输出文件夹/目录.On-the-fly Asp.net编译的实际输出文件夹默认设置为%SystemRoot%\Microsoft.NET\Framework\<versionNumber>\Temporary ASP.NET Files您可以从您的compilation标签属性更改课程.[tempDirectory][3]web.config

经过所有这些研究后,我得出结论,project -> properties -> Build -> Bin由于Asp.net网站项目模板,出现了更改目录的选项.这为用户提供了与任何其他项目相同的外观.但asp.net网站的功能仍然相同.该Bin文件夹仍然可以像在websiteAsp.net的旧模板中一样工作.