2012-02-10 29 views
0

從Visual Studio中的一個全新的控制檯應用程序模板好吧,我編輯了.csproj打造另一個項目是這樣的:構建不從VisualStudio的工作,但爲的MSBuild

... 
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> 
<Target Name="BeforeBuild"> 
    <MSBuild Projects=".\other.mproj"/> 
</Target>  
... 

其中other.mproj是:

<?xml version="1.0" encoding="utf-8"?> 
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" DefaultTargets="Build"> 

    <Target Name="Build"> 
     <Message Text="kikou" />  
    </Target> 

</Project> 

過了一會兒,我發現了(例如,通過引入錯誤或更改文本kikou別的東西)修改的other.mproj內容將不被考慮,除非卸載/ R在Visual Studio中加載項目。

從命令行建立'msbuild myproj.csproj'立即檢測'other.mproj'中的更改。因此,所有這些看起來像是Visual Studio從other.mproj文件的緩存版本開始工作。

爲什麼Visual Studio會緩存這個其他腳本(甚至不包括在項目中),我該如何解決這個問題?

更新:我也試過這UseHostCompilerIfAvailable,它不起作用。


NB1:我沒加other.mproj作爲.csproj項目引用,因爲它根本不是一個.NET項目(它只是在構建之前創建的.csproj從其它輸入資源文件)

NB2:我使用VS2010(10.0.10219.1SP1Rel +的MSBuild 4.0.30319.1)

+0

沒有解決方案,我知道這個問題,它已經發生在我身上,除了在Visual Studio中卸載/重新加載解決方案,似乎沒有辦法。 – 2012-02-10 12:23:21

+0

@VirtualBlackFox:好的,thx。作爲一種解決方法,我將msbuild命令放置爲「PreBuildEvent」,而不是將其添加到「BeforeBuild」目標中。這既節省了編輯'.csproj'並解決了'.mproj'緩存問題:) – CitizenInsane 2012-02-10 14:02:53

回答

1

Visual Studio中緩存所有的MSBuild文件,這是出於性能方面的考慮來完成。你將無法只有MSBuild才能解決這個問題。它可能可能通過一個VS插件來實現這一點,但我不是100%確定的。

+0

感謝您的快速回答。 Hope VS緩存機制將在稍後改進以正確檢測相關MSBuild文件中的更改。使用prebuild事件同時也相當不錯(即在本地工作,但不在我們的構建服務器上,因爲'msbuild.exe'不在​​巡航控制env路徑上,無論如何它很容易修復)。再次感謝。 – CitizenInsane 2012-02-12 01:09:43

+0

TADIN:發現一個優雅的解決方法[這裏](http://stackoverflow.com/a/9177749/684399) – CitizenInsane 2012-02-12 01:47:32

+0

有關信息,經過數小時的調試,剛剛發現,我已經找到了很好的解決方法[here](http:// stackoverflow .com/q/9227641/684399)for VS2010不再適用於VS2012 ...'msbuild myproject.csproj'仍然可以。即使使用臨時文件解決方法,vs2012-> myproject-> build'也不會輸入'BeforeBuild'。 – CitizenInsane 2013-10-22 17:02:59

相關問題