2017-05-17 27 views
1

我正在爲新項目設置開發環境。這是一個Web API項目,它從靜態文件提供@angular項目。爲了促進這一點,在構建後,我運行角色cli的構建函數,然後將這些文件複製到wwwroot中。這一切工作正常。

但是,我希望能夠運行兩個不同的npm腳本,具體取決於項目是處於Debug還是Release模式。在我的帖子構建腳本,我嘗試這樣做:

if "$(ConfigurationName)" == "Debug" 
(
    npm run build 
) 
else if "$(ConfigurationName)"=="Release" 
(
    npm run prod 
) 

,但我發現

The command "if "" == "Debug" 
(
    npm run build 
) 
else if ""=="Release" 
(
    npm run prod 
)" exited with code 255.  

它看起來像沒有被設置用於ConfigurationName值。我試過調試和發佈模式,並得到相同的錯誤。 ConfigurationName變量在VS 2017中有變化嗎?

編輯:但是,如果我單擊編輯後構建,然後單擊宏,我可以看到here ConfigurationName有一個值。它只是沒有通過我的劇本看到

回答

4
  1. $(Configuration),因爲它是在構建過程中給定的值足夠早可能工作在你的情況。

  2. 前&由於大多數屬性在評估構建事件屬性時未定義,所以後期構建事件並不適用於「基於SDK」的項目(未進行修改)。有關更多詳細信息,請參見https://github.com/dotnet/project-system/issues/1569

我建議做在您的項目如下:

<Project Sdk="..."> 
    <!-- other content --> 
    <Target Name="RunNpmBuild" BeforeTargets="BeforeBuild" Condition="'$(Configuration)' != 'Release'"> 
    <Exec Command="npm run build" /> 
    </Target> 
    <Target Name="RunNpmProd" BeforeTargets="BeforeBuild" Condition="'$(Configuration)' == 'Release'"> 
    <Exec Command="npm run prod" /> 
    </Target> 
</Project> 

注意,在1.0.*的CLI,構建其沒有可能不會被髮表之前存在的過程中產生的文件 - 見https://github.com/aspnet/websdk/issues/114的解決方法。

+0

啊哈,謝謝!我遇到了這個問題,並看到了建議在構建事件之前導入'',這對我有用。我無法獲得條件部分的工作,但我最終用'npm run build-$(ConfigurationName)取代了它,並且使npm的構建和prod腳本構建 - 調試和構建 - 發佈。感謝Martin的建議! –

+0

添加了純粹的MSBuild版本,如果您有任何興趣,請嘗試執行此操作。 (發佈建議仍然適用於所有形式的內容生成)。 –

相關問題