2009-01-05 111 views
1

在C++中,您可以編譯未包含在解決方案中的文件,而c#不是這種情況。如何在Visual Studio 2008中創建編譯的用戶文件?

有沒有辦法讓一個文件中的一個項目,但沒有標準SCCI提供商試圖保持在文件中檢查?

本質上我們想要做的是創建「通過開發人員」的代碼能力,類似於我們在C++中編寫代碼的能力,這允許我們讓開發人員通過僞代碼和開發人員實用程序每晚進行簽入。

#ifdef (TOM) 
#include "Tom.h"; 
#endif 

編輯我不想要麼創建解決方案文件新的配置,我想這是儘可能具體的機器,沒有源代碼管理綁定到用戶對文件/設置。

回答

1

好吧,這似乎在工作後在這裏,並從字面上嘗試「奇怪」的事情,我有一個想法。

本質上,我使用了* .csproj.user文件,聲明瞭一個UserConfig屬性,添加了一個新的常量(用於代碼檢查),並使用UserConfig的條件完成了一個ItemGroup。所有這些都在DEBUG標誌下。

唯一的問題是,該文件並沒有在Solution Explorer中顯示出來,但在C++中他們沒有任何。

我* .csproj.user文件

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> 
    <UserConfig>Tom</UserConfig> 
    <DefineConstants>DEBUG;TRACE;TOM</DefineConstants> 
    </PropertyGroup> 
    <ItemGroup Condition=" '$(UserConfig)' == 'Tom'"> 
    <Compile Include="Tom.cs" /> 
    </ItemGroup> 
</Project> 

生成的代碼

#if (TOM) 
      Tom t = new Tom(); 
#endif 
1

MSBuild有Conditional Constructs。您所要做的就是修改解決方案文件以包含您想要的內容。最終結果與您的示例代碼看起來非常相似。

<When Condition=" '$(Configuration)'=='TOM' "> 
    <ItemGroup> 
    <Compile Include="tomCode\*.cs" />  
    </ItemGroup> 
</When> 
+0

我不能得到這個工作。 – 2009-01-05 23:02:42

+0

感謝您激發我的想法:) – 2009-01-05 23:30:55

0

我正在試試這個。

<ItemGroup Condition=" '$(Configuration)' == 'Tom'"> 
    <Compile Include="Tom.cs" /> 
    </ItemGroup> 
相關問題