我有一個可能存在也可能不存在的引用項目。我有使用該引用的代碼,並且只想在程序集存在的情況下編譯它。我在想的東西沿着線:C#條件編譯,如果程序集存在
#if ASSEMBLY_EXISTS
AssemblyClass.DoSomething();
#endif
我可以把#定義在頂部,並根據需要註釋/取消註釋,但我更喜歡,如果它可能只是在某種程度上知道如果它不存在我的手動干預,這導致我相信#if不適合這種情況。根據程序集是否存在,是否有另一種有條件編譯的方法?
我有一個可能存在也可能不存在的引用項目。我有使用該引用的代碼,並且只想在程序集存在的情況下編譯它。我在想的東西沿着線:C#條件編譯,如果程序集存在
#if ASSEMBLY_EXISTS
AssemblyClass.DoSomething();
#endif
我可以把#定義在頂部,並根據需要註釋/取消註釋,但我更喜歡,如果它可能只是在某種程度上知道如果它不存在我的手動干預,這導致我相信#if不適合這種情況。根據程序集是否存在,是否有另一種有條件編譯的方法?
也許它與MSBUILD內的條件;
它看起來像它
<PropertyGroup>
<DefineConstants Condition="Exists('my.dll') ">$(DefineConstants);DLLEXISTS</DefineConstants>
</PropertyGroup>
,應該走很遠倒在你的.csproj的文件。
這讀取,大致爲「通過附加DLLEXISTS重新定義的常量,如果my.dll存在」
現在,你應該能夠做到
#if DLLEXISTS
// your stuff here
#endif
您可能需要反覆折騰EXISTS表達式來查找適當的相對路徑。
不,你不能這樣做。 您不能在編譯時定義條件編譯符號的結果。
如果你想得到花哨,你可以寫一個新的程序,檢測缺失的程序集並修改你的源代碼。然後,您可以在項目的預生成事件中執行該程序。
源代碼的修改可能只是在源文件的頂部添加或刪除您建議的#define。
我喜歡你的「想象」想法。如果沒有簡單的方法,這顯然會起作用,並且看起來像是一個很好的後備。 – TTT
嘗試,抓住,最後?我假設你會得到一個對象ref。沒有設置爲對象異常的實例,所以有一個特定的catch塊來處理等。不是一個非常有效的方法,但我不知道這個代碼是必需的快。 –
@stuartd,是不是在運行時檢查鏈接? – TTT
沒有可用於存在引用程序集的預編譯符號。 –