2017-03-15 81 views
0

我有一個在VS2013和VS2015中工作多年的設計時T4模板。在Visual Studio 2017中損壞的T4組裝指令

在VS2017中,該模板無法運行,並出現MissingMethodException。有問題的方法被安置在一個自定義組件中。該程序集使用絕對路徑以及$(SolutionDir)宏引用。例如:

<#@ assembly name="$(SolutionDir)path\my.dll"#> 

我一直在使用Fusion Log Viewer來調試這個問題。顯然,找不到「my.dll」。根據日誌,Visual Studio並沒有在尋找絕對路徑。

我認爲這是T4VSHost中的一個錯誤。無論如何要解決這個問題或解決方法嗎?

+0

作爲解決方法,我將my.dll放在$(DevEnvDir)的「我的」子目錄中。就我個人而言,我認爲這是一個不好的做法。但Fusion會以這種方式找到它。我寧願將它放在更負責任的地方,並指示Fusion在哪裏找到它。 –

+0

可以硬編碼文件路徑嗎? – qxg

+0

@qxg,你在暗示宏(或宏擴展)有問題嗎?顯然,這不是問題。我硬編碼的路徑來測試理論 - 不行。 –

回答

0

Visual Studio在2017和之前的版本中將鎖定其在當前VS會話中構建的組件。所以,如果你的路徑看起來像。

<#@ assembly name="$(SolutionDir)SomeProjectFolder\bin\Debug\SomeAssembly.dll" #>

然後T4引擎將拋出一個異常說,大會無法找到。如果您重新啓動解決方案,然後在沒有構建的情況下運行T4模板,它將正確運行。

這使得調試或以其他方式處理主要用於在T4模板中引用的程序集,這是一個痛苦。

相關問題