dotnet核心发布:输出中的include / exclude dir

时间:2017-04-23 10:13:47

标签: msbuild .net-core

给出带有文件夹的aspnet项目:

/
  /sql
  /WebApp
    /Client
    /wwwroot
    /Views

在project.json上我使用了

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

dotnet publish之后有sqlwwwrootViews个文件夹。

迁移到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的文件夹结构?

1 个答案:

答案 0 :(得分:10)

更新

使用VS 2017&gt; = 15.3或.NET CLI版本&gt; = 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使用项目的相对路径作为目标路径的一些黑客攻击。这是因为&#34;项目锥体之外的项目&#34;如果AssignTargetPath没有Link元数据(source),则不会在<Content Remove="..." />中考虑。

替代<Content Update="Client\**" CopyToPublishDirectory="Never" /> 你也可以这样做,以便在VS中包含文件:

public class BoardPanel extends JPanel{

private JLayeredPane lp;

private BufferedImage imageBoard;
private final int WIDTH = 1000;
private final int HEIGHT = 800;

private ArrayList<Slot> slotSet1;
private ArrayList<Slot> slotSet2;
private ArrayList<Slot> slotSet3;
private ArrayList<Slot> slotSet4;
private CheckerSet ch1;
public  Checker chc;

public BoardPanel(){

    initComponents();

}

private void initComponents(){

    lp = new JLayeredPane();

    setPreferredSize(new java.awt.Dimension(1500, 1000));

    //lp.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)));
    lp.setBorder(javax.swing.BorderFactory.createTitledBorder("asdadsaddadsadasdadsa"));
    lp.setMaximumSize(new java.awt.Dimension(1124, 904));
    lp.setMinimumSize(new java.awt.Dimension(1124, 904));


    try {
       imageBoard = ImageIO.read(getClass().getResource("/images/board.jpg"));
   } catch (IOException e) {
       System.out.println("file error");
   }

        JLabel label = new JLabel();
        label.setVerticalAlignment(JLabel.TOP);
        label.setHorizontalAlignment(JLabel.CENTER);
        label.setOpaque(true);
        label.setBackground(Color.BLACK);
        label.setForeground(Color.black);
        label.setBorder(BorderFactory.createLineBorder(Color.black));
        label.setBounds(0, 0, 50, 50);

    lp.add(label,JLayeredPane.DEFAULT_LAYER);


}
public void paintComponent(Graphics g){

    //g.drawImage(imageBoard,0,0,null);

}