避免使用新的csproj格式设置“复制到输出目录”

时间:2017-07-28 10:48:28

标签: c# asp.net .net visual-studio-2017 nancy

我使用" new"创建了一个VS2017解决方案。 csproj格式,它是使用Nancyfx编写的web .net 4.6.1应用程序,通过owin和IIS提供页面。

我的所有观看次数都在Views文件夹下,但如果我没有设置Copy to Output选项,则IIS无法找到它们(我的自定义配置文件也是如此)。

我认为问题是输出目录自动设置为bin\net461\win7-x86而不是简单bin,并且Web应用程序的工作目录设置为输出目录,所以我必须设置copy to output选项。

如何使用新的csproj格式,但保留编辑视图文件而无需重建应用程序的功能?我已经尝试将输出文件夹设置为bin,但会被忽略。我还尝试在“调试”选项卡中设置“工作目录”值,但无济于事。我在每个配置(调试/发布)中设置了值,因此不是问题。

这是我的csproj文件:

<Project Sdk="Microsoft.NET.Sdk.Web">

  <PropertyGroup>
    <TargetFramework>net461</TargetFramework>
    <RuntimeIdentifier>win7-x86</RuntimeIdentifier>
  </PropertyGroup>

  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x86'" />

  <ItemGroup>
    <Folder Include="wwwroot\" />
  </ItemGroup>
  <ItemGroup>
    <PackageReference Include="Microsoft.ApplicationInsights.AspNetCore" Version="2.0.0" />
    <PackageReference Include="Microsoft.AspNetCore" Version="1.1.2" />
    <PackageReference Include="Microsoft.AspNetCore.Owin" Version="1.1.2" />
    <PackageReference Include="MongoDB.Driver" Version="2.4.4" />
    <PackageReference Include="Nancy" Version="2.0.0-clinteastwood" />
    <PackageReference Include="Nancy.Authentication.Forms" Version="2.0.0-clinteastwood" />
    <PackageReference Include="Nancy.Authentication.Stateless" Version="2.0.0-clinteastwood" />
    <PackageReference Include="Nancy.Bootstrappers.Unity" Version="2.0.0-clinteastwood" />
    <PackageReference Include="Nancy.Serialization.JsonNet" Version="2.0.0-clinteastwood" />
    <PackageReference Include="Nancy.Validation.FluentValidation" Version="2.0.0-clinteastwood" />
    <PackageReference Include="Newtonsoft.Json" Version="10.0.2" />
  </ItemGroup>
  <ItemGroup>
    <Content Include="Views\*.sshtml">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </Content>
  </ItemGroup>
  <ItemGroup>
    <Reference Include="Microsoft.CSharp" />
    <Reference Include="System.Configuration" />
  </ItemGroup>

</Project>

1 个答案:

答案 0 :(得分:1)

经过两天的尝试后,我找到了问题的根本原因:它不是VS / csproj问题,而是Nancyfx 2.0配置问题。

对于每个感兴趣的人都是我为解决问题而采取的步骤:

  • 实施IRootPathProvider配置为返回IHostingEnvironment.ContentRootPath
  • 中的Startup
  • IRootPathProvider覆盖Bootstrapper
  • 中注册自定义IRootPathProvider RootPathProvider { get; }
  • 默认情况下,在Nancyfx 2.0中,视图始终缓存,即使在调试模式下(see this ticket),因此在Bootstrapper中覆盖configure方法,如下所示。 / LI>

方法Bootstrapper.Configure

public override void Configure(INancyEnvironment environment)
{
    base.Configure(environment);
#if DEBUG
    // Disable view caching in debug mode
    environment.Views(true, true);
#endif
}

现在从VS项目目录(而不是bin文件夹)读取视图,并且不会缓存视图,因此不会在每次视图更改之间进行重建。在csproj中,您可以轻松放置:

<None Include="Views\**\*.sshtml" />