Dot-Net-4.0
為什麼 ccrewrite.exe 沒有從命令行執行任何操作?
我在 Visual Studio 2010 中的程式碼合同工作正常,但我無法
ccrewrite.exe從命令行做任何有用的事情。這是一個範例應用程序:using System.Diagnostics.Contracts; public class Dummy { public static void Main(string[] args) { Contract.Requires(args.Length > 0); } }然後我編譯程式碼並在其上執行 ccrewrite.exe:
> csc /debug+ /D:CONTRACTS_FULL Dummy.cs > ccrewrite /o:RewrittenDummy.exe Dummy.exe elapsed time: 61ms之後就沒有
RewrittenDummy.exe文件了。我已經嘗試了很多選項,但沒有任何區別。我注意到的幾件事:
- 它肯定在載入 Dummy.exe,因為如果我指定一個不存在的文件,它就會死掉
- Dummy.exe 肯定包含對 Contract 的引用 - 如果我在沒有參數的情況下執行它,它會適當地失敗(但如果它被重寫,錯誤消息沒有像我預期的那樣被填寫)
- 使用後置條件和不變數沒有區別
我試過調高警告和冗長,但這根本沒有幫助我做錯了什麼?
(也在程式碼合同論壇中作為問題提出。我將自己在這裡添加任何相關答案。)
好的,這個問題已經在 MSDN 論壇中回答了。這一次,並不是我真的完全愚蠢——這是真的可以用警告來做的事情。
閱讀論壇文章以獲取全部詳細資訊,但基本問題是
ccrewrite找不到合同類:它正在尋找 .NET 3.5 CLR 版本mscorlib而不是 .NET 4.0 版本。這可以通過明確列出相關程序集的路徑來解決:
> ccrewrite /o:rewrittendummy.exe dummy.exe /libpaths:%SystemRoot%\Microsoft.Net\Framework\v4.0.20506