2009-06-29 260 views
81

是如何從在.csproj文件中,<None Include =「...」>代表什麼?

<Content Include="C:\foo.bar" /> 

<None Include="C:\foo.bar" /> 

不同?

+28

一氧化碳,我想你回答了你自己的問題:出於好奇。 – 2009-06-29 23:31:41

+6

我有幾個`Content`s變成`None`s。我認爲這是在轉換爲Razor時將.ascx中的文件重命名爲.cshtml時發生的。手動更改它們可以解決我遇到的一些部署問題。很高興我找到了這個。 – Chris 2011-02-24 18:13:37

+7

@MatthewScharley我真的希望你能夠冷靜點評,因爲我會降低你的評價。爲什麼他不應該編輯他的.csproj文件? – Jez 2012-10-03 09:06:36

回答

88

有關build action屬性的MSDN文章解釋了這些差異。

- 該文件未包含在項目輸出組中,也未在構建過程中進行編譯。一個示例是包含文檔的文本文件,如自述文件。

內容 - 該文件未編譯,但包含在內容輸出組中。例如,此設置是.htm或其他類型Web文件的默認值。

20

一個不同之處是他們如何獲得發表; 「無」項目不會包含在發佈中,「內容」項目可以;例如,在「發佈」選項卡上的「應用程序文件」對話框中。

10

我不是100%肯定(我讀生成操作屬性的MSDN說明),但只是複製從MSDN那答案StackOverflow的不能完全回答這個問題對我來說。

的區別無內容只對Web項目有影響。對於命令行項目,WinForm項目或UnitTest項目(在我的情況下)等內容沒有不同的行爲。

MSDN:「項目輸出組」或「內容輸出組」僅用於Web項目中的術語,對不對?

1

我有一個項目,其中不包含可編譯項目(它存儲HTML和JavaScript爲茉莉花單元測試)。

有一天,我的解決方案(包含上述項目)停止編譯,說「目標」Build「在項目中不存在」。

我添加了一個導入來引入編譯器,它在我的機器上工作正常,但在構建服務器上使用msbuild失敗。

<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> 

我再變線從

<None Include="SpecRunner.html" /> 

<Content Include="SpecRunner.html" /> 

和它的工作在構建服務器上也是如此。

1

您在模板項目文件中無需包含您在.vstemplate中定義的文件,否則它們會在創建&翻譯過程中丟失。他們留在它用來構建一切的臨時文件夾中,並在不久之後被刪除。

5

在我的情況,我的MSBuild文件曾經對出現的圖像資源的ItemGroup如下:

<ItemGroup> 
    <Content Include="Resources\image001.png" /> 
    <Content Include="Resources\image002.png" /> 
    <Content Include="Resources\image003.png" /> 
    <Content Include="Resources\image004.png" /> 
    <None Include="Resources\image005.png" /> 
    <None Include="Resources\image006.png" /> 
    <None Include="Resources\image007.png" /> 
    </ItemGroup> 

雖然我的項目是建設很好,這讓我不知道爲什麼我有ContentNone項目的混合在我的ItemGroup中輸入元素。這MSDN article(爲Visual Studio 2010)給了我一直在尋找的指導:

注意,當資源編輯器增加了一個圖像,它集構建 行動,因爲.resx文件引用圖像 文件。在構建時,圖像被拉入到.resx文件創建的.resources文件 中。然後可以通過爲.resx文件自動生成的強類型類輕鬆訪問圖像 。 因此,您不應該將此設置更改爲嵌入式 資源,因爲這樣做會在 程序集中包含圖像兩次。

分辨率:有了這個指導意見,用文本編輯器,我改變了Content項目類型元素None

另外,有關MSBuild項目的概述,請參閱此MSDN article

相關問題