2017-04-23 48 views
1

与文件夹鉴于ASPNET项目:DOTNET核心发布:包含/排除在输出目录

/ 
    /sql 
    /WebApp 
    /Client 
    /wwwroot 
    /Views 

在project.json我用

"publishOptions": { 
    "include": [ 
     "..\\sql", 
     "wwwroot", 
     "Views", 
     "web.config" 
    ] 
    } 

并经过dotnet publishsqlwwwrootViews文件夹。

迁移的csproj(Microsoft.NET.Sdk.Web)后,我得到了

<None Update="..\sql\**\*;wwwroot\**\*;Views\**\*"> 
     <CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory> 
</None> 

msbuild15 /t:publish(CLI没有为我的作品)有wwwrootViewsClient里面只有json文件。来自sql的文件被复制但变平。

我也尝试将其更改为:

<Content Include="..\sql\**" CopyToPublishDirectory="PreserveNewest" /> 
<Content Remove="Client\*" CopyToPublishDirectory="Never" /> 

,得到了相同的输出。

如何删除Client并保留sql的文件夹结构?

回答

3

更新:

当使用VS 2017> = 15.3或.NET CLI版本> = 2.0,有一个新的功能,它自动增加Link元数据几个已知的项目类型(包括Content)。这可以用于像:

<Content Include="..\sql\**" LinkBase="sql" /> 

原文:

您可以使用此:

<ItemGroup> 
    <Content Remove="Client\**" /> 
    <Content Include="..\sql\**" CopyToPublishDirectory="PreserveNewest" Link="sql\%(RecursiveDir)\%(Filename)%(Extension)" /> 
    </ItemGroup> 

内容包括项目的链接元数据是有点黑客攻击,使MSBuild的使用该项目的相对路径作为目标路径。这是因为“项目圆锥体”之外的项目如果没有Link元数据(source),则不会在AssignTargetPath中考虑。

替代<Content Remove="..." />你也可以做到这一点还是有内部VS文件:

<Content Update="Client\**" CopyToPublishDirectory="Never" /> 
+0

然而,这表明在'SoultionExplorer sql'文件夹,所以我'<复制SourceFiles =“@替换它(FilesToCopy )“DestinationFolder =”$(TargetDir)\ sql \%(RecursiveDir)“SkipUnchangedFiles =”true“OverwriteReadOnlyFiles =”true“ContinueOnError =”false“/> 'AfterTargets = Publish – smg

+0

您也可以设置Visible =”false“在Content Include元素上隐藏解决方案资源管理器中的文件。 –