2014-12-23 22 views
2

我使用nuget pack myproject.csproj來打包一個DLL,但我想包括一個配置模板也。下面是相關nuspec文件:打包csproj不包括nuspec的文件元素

<?xml version="1.0"?> 
<package > 
    <metadata> 
     <id>$id$</id> 
     <version>$version$</version> 
     <title>$title$</title> 
     <authors>Chris Vann</authors> 
     <owners>MyCompany</owners> 
     <requireLicenseAcceptance>false</requireLicenseAcceptance> 
     <description>Log4net appenders for targeting MS Azure</description> 
     <releaseNotes></releaseNotes> 
     <copyright>Copyright 2014</copyright> 
     <tags>log4net logging azure</tags> 
    </metadata> 
    <files> 
     <file src="log4net.config" target="."/> 
    </files> 
</package> 

的NuGet正確導入的元數據,但似乎裝箱的csproj文件時完全忽略了文件的元素。有沒有解決這個問題的方法?

回答

3

的NuGet.exe命令行工具的一些細微的調試後,這裏是我的答案:

NuGet.exe使用默認排除列表,從你的包排除一些平時不需要的文件。 此列表還包含任何以點開頭的文件/文件夾。

將您的nuspec中的文件的目標設置爲「。」在使用pack命令時將其從包中排除。

的解決方案是下列之一: (a)中省略了目標屬性(等效於目標設定爲 「」) (b)中使用選項-NoDefaultExcludes,例如:包myproj.csproj -NoDefaultExcludes

兩種解決方案的結果都與您的預期相同 - 名爲log4net.config的文件將放置在軟件包的頂層文件夾中,位於.nuspec文件和lib文件夾旁邊。 我個人建議你使用選項(a),因爲「。」文件夾除了根文件夾以外沒有任何意義。

有一點需要注意:在我看來,您需要將log4net.config添加到DLL文件夾旁邊的DLL文件夾中,而不是軟件包的根文件夾。

-2

當你nuget包一個項目文件它不看nuspec文件。這是非常基本的。如果您想了解更多,如指定文件控制,你將需要使用的NuGet包mypackage.nuspec

注意:一旦你包括文件部分,你必須列出所有文件

+0

這個問題是我現在必須管理所有文件,正如你所說的,還有版本,ID等。這似乎是一個相當大的疏忽。爲什麼不包括文件指令,如果存在除了默認的項目的東西。 – Chris

+4

這是不正確的。如果在具有nuspec文件的文件夾中運行'nuget pack',它將csproj用作項目,但仍然讀取元數據的nuspec,您可以在輸出中看到它。 –