web-dev-qa-db-ja.com

NuGetが外部参照を追加

プロジェクトに.nuspecファイルがあり、サードパーティを参照していますDLLパッケージを含むプロジェクトが参照する必要があります。

<?xml version="1.0"?>
<package >
<metadata>
<id>$id$</id>
<version>$version$</version>
<title>$title$</title>
<authors>$author$</authors>
<owners>$author$</owners>
<requireLicenseAcceptance>false</requireLicenseAcceptance>
<description>$description$</description>
<releaseNotes>Locked against log4net 1.2 - less than 1.2.11 which has breaking changes</releaseNotes>
<copyright>Copyright 2012  blah blah</copyright>
<dependencies>
  <dependency id="log4net" version="[1.2,1.2.11)" />
  <dependency id="My.Other.Project" />
</dependencies>
<references>
  <reference file="Third.Party.dll" />
</references>

.csprojと.nuspecファイルがあるディレクトリからnuget.exe pack My.Project.csprojを実行しようとすると、

無効なアセンブリ参照 'Third.Party.dll'。 「Third.Party.dll」という名前のファイルがlibディレクトリに存在することを確認します。

。\ lib。\ bin\Debug\lib。\ obj\libを作成しました

ファイルは3つの場所すべてにあります。それは本当にどこにlibフォルダーが必要ですか?

36
Carl Bussema

< references >要素は、パッケージのインストール時にプロジェクトに追加される参照を定義します。欠けているのは、< files >要素で実行される、パッケージの一部であるファイルを定義する部分です。したがって、.nuspecファイルは次のようになります。

<?xml version="1.0"?>
<package>
    <metadata>
    <id>$id$</id>
    <version>$version$</version>
    <title>$title$</title>
    <authors>$author$</authors>
    <owners>$author$</owners>
    <requireLicenseAcceptance>false</requireLicenseAcceptance>
    <description>$description$</description>
    <releaseNotes>Locked against log4net 1.2 - less than 1.2.11 which has breaking changes</releaseNotes>
    <copyright>Copyright 2012  blah blah</copyright>
    <dependencies>
      <dependency id="log4net" version="[1.2,1.2.11)" />
      <dependency id="My.Other.Project" />
    </dependencies>
    <references>
      <reference file="Third.Party.dll" />
    </references>
  </metadata>
  <files>
    <file src="lib\Third.Party.dll" target="lib"/>
  </files>
</package>

唯一の違いは、メタデータ要素の後のファイル要素です。

37
Matt Ward

私は同じ問題を抱えていましたが、ここでそれを解決しました。私には奇妙に思われましたが、それはそれが機能するように見え、この方法でサードパーティのアセンブリ用のnugetパッケージを作成する必要はありません。

私の.nuspecは次のようになります。

 <?xml version="1.0"?>
<package >
    <metadata>
        <id>$id$</id>
        <version>$version$</version>
        <title>$title$</title>
        <authors>$author$</authors>
        <owners>$author$</owners>
        <requireLicenseAcceptance>false</requireLicenseAcceptance>
        <description>$description$</description>
        <releaseNotes>Some release notes</releaseNotes>
        <copyright>Copyright 2012</copyright>
        <tags>some,tags</tags>
        <references>
            <reference file="thirdparty.dll"></reference>
            <reference file="ThisAssemblyName.dll"></reference>
        </references>
    </metadata>
    <files>
        <file src="web.config.transform" target="content"/>
        <file src="lib\net40\thirdparty.dll" target="lib\net40"/>
    </files>
</package>

ご覧のとおり-ファイルノードを追加して、サードパーティのdllをターゲットのlib\net40(私の場合)フォルダーにコピーする必要がありました。次に、thirdparty.dllと、このNuGetパッケージが作成するアセンブリの両方に「参照」ノードを追加する必要がありました。 Matt Wardの解shouldは正しいように感じますが、(冗長な)参照ノードを追加するまで機能しませんでした。

お役に立てば幸いです。

ありがとう

ムスタファ

12
Mustafakidd