2009-01-12 37 views
10

我有一個「自定義工具」,用於Visual Studio將一些模板文件嵌入到代碼中。爲了一致性和可移植性,我希望能夠在Visual Studio之外構建時從MSBuild運行此模板處理器。在MSBuild中使用Studio的「自定義工具」

Visual Studio中的文件創建以下片段:

<!-- the template --> 
<None Include="Template.in"> 
    <Generator>Template Processor</Generator> 
    <LastGenOutput>Template.in.Designer.cs</LastGenOutput> 
</None> 
<!-- generated file --> 
<Compile Include="Template.in.Designer.cs"> 
    <AutoGen>True</AutoGen> 
    <DesignTime>True</DesignTime> 
    <DependentUpon>Template.in</DependentUpon> 
</Compile> 

這裏的問題是,Template.in僅由Studio進行處理,而不是由的MSBuild,這可能導致了過期Designer.cs文件。

是否有一個現有的MSBuild任務可以直接使用IVsSingleFileGenerator(包括從註冊表中加載它的位置),還是我必須手動調用處理器(通過自己實現所述MSBuild任務還是調整處理器)?

有趣的是,Using MSBuild文章在MSDN說:

單個文件生成器是在設計時訪問 而已,但MSBuild任務 可以在設計時和 構建時使用。爲獲得最大的靈活性,因此,使用MSBuild任務到 進行變換並生成代碼。有關更多 信息,請參閱項目項目(Visual Studio SDK)。


更新:我砍死這個特定的自定義工具爲MSBuild任務,但它不是漂亮。我仍然更喜歡維護良好的通用解決方案。我的博客上有posted the source

+1

爲了寫出一個SFG(見http://www.codeproject.com/Articles/686405/Writing-a-Single-File-Generator),我花了相當大的麻煩才最終意識到他們不會不會自動構建,並且不適用於MSBuild。什麼是更好的方法?我無法訪問您的博客鏈接。 – Qwertie 2013-11-23 17:06:59

回答

1

當您在VisualStudio中指定自定義工具時,它會將什麼添加到您的項目或解決方案文件中?由於它們只是msbuild文件,因此您可以使用添加的xml作爲您自己的構建文件的模板。

+0

不錯的提示。我已經添加了一個例子 – 2009-01-12 18:43:23

相關問題