3 回答

TA貢獻1725條經驗 獲得超8個贊
我知道老線程,但是我找到了一種方法,但我一直忘了它,而在上次尋找它的搜索中,我偶然發現了這個問題。我發現最好的方法是使用.csproj文件中的BeforeBuild目標。
<Target Name="BeforeBuild">
<ItemGroup>
<Content Include="**\*.less" />
</ItemGroup>
</Target>
VS 2010不會涉及此部分,它可確保每次構建項目時文件都作為內容包含在內。

TA貢獻1860條經驗 獲得超9個贊
您只需擴展您的網站.csproj文件即可。只需使用遞歸通配符添加內容根文件夾:
...
<ItemGroup>
<!-- your normal project content -->
<Content Include="Default.aspx" />
<!-- your static content you like to publish -->
<Content Include="Images\**\*.*" />
</ItemGroup>
...
這樣做會使此文件夾以及下面的所有內容在解決方案瀏覽器中可見。
如果嘗試通過指定隱藏解決方案瀏覽器中的文件夾
<Content Include="Images\**.*.*">
<Visible>false</Visible>
</Content>
它不會被發布。
更新資料
正如您已經發現的,一旦您觸摸解決方案中的文件夾,通配符將被替換,因為VS項目并非旨在包含任意內容。
因此,您將必須確保文件夾及其內容永遠不會在VS中被修改-添加或刪除文件只能在文件系統上完成...這就是您想要的,因為我了解您的問題。
如果該文件夾可以在VS中隱藏,但我找不到隱藏它并發布的方法,將會更容易。
另一種不成功的方法是按CreateItem任務包含文件夾。這導致文件夾的內容被發布到\ bin \ app.publish \ ...,并且無法說服將其與.csproj中的內容項一起發布,因此我沒有在我的答案中提出它。

TA貢獻1802條經驗 獲得超5個贊
對于使用Chris的答案有問題的人,這是Visual Studio 2012及更高版本的解決方案:
<Target Name="ContentsBeforeBuild" AfterTargets="BeforeBuild">
<ItemGroup>
<Content Include="images\**" />
</ItemGroup>
</Target>
就像克里斯在回答中提到的那樣- 即使您手動在目標目錄中四處逛逛(添加/刪除文件),Visual Studio 也不會涉及到此<Target>部分。
請注意,您應該在其中包含文件的子目錄(在上述情況下為images)。Visual Studio / MSBuild會將這些文件放在項目結構中的同一目錄中。如果不使用子目錄,則文件將放置在項目結構的根目錄下。
有關通配符的快速說明:
**遞歸地表示所有內容(文件,子目錄和其中的文件)
*.ext將ext在頂級目錄中包含所有帶有擴展名的文件,但不包括子目錄
例如,*.ext可能是*.png,*.js等。任何文件擴展名都可以使用
**\*.ext將包括ext頂級目錄和所有子目錄中所有帶有擴展名的文件。
請參閱“ 如何使用Nant / Ant命名模式”中的答案?有關示例的更完整說明。
為了完成操作,請注意,使用<Target>和不使用之間有所不同。
通過這種<Target>方法,Visual Studio 將不會在解決方案資源管理器中顯示文件。
<Target Name="ContentsBeforeBuild" AfterTargets="BeforeBuild">
<ItemGroup>
<Content Include="images\**" />
</ItemGroup>
</Target>
非<Target>方法將指示Visual Studio 在解決方案資源管理器中顯示文件。這一缺點是,對自動目錄的任何操作都將導致Visual Studio覆蓋通配符條目。還應注意,以下方法僅在VS中打開“解決方案/項目”后才會更新“解決方案資源管理器”。甚至解決方案資源管理器的“刷新”工具欄按鈕也不會執行此操作。
<ItemGroup>
<Content Include="images\**" />
</ItemGroup>
- 3 回答
- 0 關注
- 703 瀏覽
添加回答
舉報