2017-03-18 5 views
1

私はASP.NET Core 1.1アプリケーションを持っていました。これは、project.jsonを使用してVisual Studio 2015からMsBuild csproj標準のVisual Studio 2017にアップグレードされました。このアプリはLinux上のドッカーコンテナにデプロイされており、official images from microsoftが使用されています。 BundlerMinifierが見つかりませんでした。ただし、Visual Studio 2017ではなく、Windows 10でdotnet publishを使用していないドッカーのみ。BundlerMinifierCoreファイルはdotnetにコピーされません

バンドルが生成されていることがわかりました。しかし、ソリューションのwwwrootフォルダには、公開出力フォルダ(--outputからdotnet publishに渡されたもの)ではなく、私のVSソリューションがドッカーコンテナにある/appがあります。今度はdotnet publish --output /app/outputを実行します。バンドルされたファイルは、/app/output/wwwrootの代わりに/app/src/{projectName}/wwwrootになりました。私はこのようなbundleconfig.jsonで相対パスを使用

:バンドルを作成するには

[ 
    { 
     "minify": { "enabled": false }, 
     "outputFileName": "wwwroot/site.min.css", 
     "inputFiles": [ 
      "wwwroot/lib/my-input-file.css" 
     ] 
    } 
] 

、私は私のcsprojファイル

<Target Name="PrepublishScript" BeforeTargets="PrepareForPublish"> 
    <Exec Command="bower install" /> 
    <Exec Command="dotnet bundle" /> 
    </Target> 

で次の公開スクリプトを持って、私はと非常に慣れていませんよMsBuild。しかし、いくつか・研究によると、以下の行が(wwwrootのような)出力ディレクトリにファイルをコピーするために責任を負うようだ

<ItemGroup> 
    <None Update="wwwroot\**\*;Views\**\*.cshtml;Areas\**\*.cshtml"> 
     <CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory> 
    </None> 
    </ItemGroup> 

wwwrootには、すでにここに含まれているとビューの作品のような他のファイルのコピーが、私はそこにあると思ったので、実行ordnerについての問題。 MsBuildのようなものは、MsBuildがそれらを公開する前にファイルをコピーします。しかし、これはPrepareForPublishターゲットの前に行われているので、ロジックからは不可能と思われます。これはMicrosoft docsに従って正しい方法です。

答えて

3

これは、ファイルをwwwrootに含めないためです。

<ItemGroup> 
    <None Update="wwwroot\**\*;Views\**\*.cshtml;Areas\**\*.cshtml"> 
    <CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory> 
    </None> 
</ItemGroup> 

wwwroot\**\*だけwwwrootののサブフォルダ内のファイルをコピーします(少なくともこれは古いproject.json構造のケースまだあった)が、あなたのCSSファイルはwwwroot/site.min.cssです。したがって、wwwroot/css/site.min.cssに移動してください。または簡単に:ちょうど全体wwwrootフォルダ(およびbower_modulesまたはnpm_modulesのように、wwwrootの外であなたのLIBSファイルを保持)の上にコピーを公開:また、私は<None>のかわからない

は、それのために右のタグです。私のプロジェクトのcsprojで唯一<None Include="App.config" />があり、私は上書きコピーファイルは、ビューおよび地域における任意の無関係なファイルを持つべきではないとして、それはあまりにもフォルダ全体をコピーする方が簡単です

<ItemGroup> 
    <None Include="App.config" /> 
    <Content Update="wwwroot;Views;Areas;appsettings.json;web.config"> 
    <CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory> 
    </Content> 
</ItemGroup> 

下回るように、 <Content>です。

+1

ありがとうございました。コピーの問題が修正されました。しかし、 'PrepareForPublish'の前に' dotnet bundle 'の実行に何らかのバグがあるように見えました。私の現在の回避策は 'dotnet publish 'の前に' dotnet bundle'を手動で呼び出すことです。これは私たちの修正と一緒に働く。 – Lion

+0

https://github.com/dotnet/sdk/issues/1044 –

関連する問題