2012-11-18 15 views
6

Benim F # türü sağlayıcısı, tüm bağımlılıkları aynı klasörde olmadıkça çalışmıyor gibi görünüyor. Bu tür sağlayıcıları nuget üzerinden dağıtmak için çok iyi çalışmıyor. Bunu nasıl çözeceğinize dair herhangi bir öneriniz var mı?Bir F # Tipi Sağlayıcıyı NuGet üzerinden nasıl dağıtabilirim?

hatası FS3033: "Froto.Gen.ProtoTypeProvider" türünde bir hata bildirimi şöyle bildirilir: Dosya veya derleme yüklenemedi 'Froto.Roslyn, Sürüm = 0.0.0.1, Culture = neutral, PublicKeyToken = null 'veya bağımlılıklarından biri. Sistem belirtilen dosyayı bulamıyor.

tip sağlayıcısı bu kütüphanede: paketleri \ Froto.Gen.0.0.0.1 \ lib \ net45 \ Froto.Gen.dll

bağımlılıkları projedeki tüm bulunmaktadır. Hepsini \ Froto.Gen.0.0.0.1 \ lib \ net45 \ paketlerine kopyalarsam, tip sağlayıcı çalışır.

2012-11-19 Güncelleştirme: Sorunu daha iyi açıklamak için bugün bir NuGet paketi oluşturacağım.

+0

İçinde "Froto.Roslyn" DLL kendi Nuget paketinde kullanılabilir mi? Eğer değilse, "Froto.Gen.ProtoTypeProvider" 'ı engelleyen bir müşterinin bağımlılığa erişimi olduğunu nasıl varsayıyorsunuz? Eğer mevcut değilse, işe yaramaz (bu yüzden tüm bağımlılıklarınızın Nuget paketine kopyalanması işe yaramaktadır). – Chris

cevap

4

Bu sorun F # özel değil. Kesinlikle

  • Nuget paketiniz can gerekli başvuruları
  • bir Nuget paketi göndereceğini diğer paketler bağlı olduğunu bildirmek için Nuget paketinin parçası olarak ya

    • gemi gerekli tüm bağımlılıkları kolayca çoklu paketler (eğer doğru şekilde paketlenmişse). Burada bir paketin nasıl oluşturulacağını daha ayrıntılı bir şekilde okuyabilirsiniz: http://docs.nuget.org/docs/creating-packages/creating-and-publishing-a-package

      NuGet'i projelerinizin msbuild betikleri ile bütünleştirmekte sorun yaşarsanız, NuGet paketlerini oluşturmak için kullanılan diğer açık kaynak kodlu projelere bakmanızı öneririz. FSharpX veya FSharp Güç Paketi).

    +0

    NuGet paketi, gerekli bağımlılıkları referans alır. Tüm bağımlılıklar indirilir ve projenin bir parçasıdır. F # spesifik olan kısım, tip sağlayıcının proje türlerini değil, yalnızca aynı klasörü yüklemesidir. Projeden bağımlılıkları bulabilmek için bekliyordum. Aynı klasöre bazı bağımlılıklar ekleyebilirim, ama Roslyn gibi bazı bağımlılıkları da dahil etme haklarım olduğunu düşünmüyorum. –

    +0

    @CameronTaggart: 'Proje' ile kastettiğiniz şeyi gerçekten anlamıyorum ama MSBuild/VisualStudi uygulamasında bir derleme başvurusu anlamına geldiğini varsayalım. F # Type Providers'ın CLR'nin montaj yükleme kurallarından saptığını düşünemiyorum, bu yüzden sorununun düzeltilmesi kolay olmalı. Beni NuGet paketinize yönlendirebilir misin? –

    +1

    Yukarıdaki ifadelerde yanlış olabilir, F # Type Sağlayıcıları çalışma zamanı yerine derleme zamanında çağrılır. Bu biraz beklenmedik çünkü çalışma zamanında derleyen System.Expression'a benzer şekilde çalışacaklarını varsaydım. Aslında, @ovatsus'un önerdiği şeyi yapmak zorunda kalacaksınız. –

    3

    FSharpx.Core'a bağımlı FSharpx.TypeProviders ile benzer bir sorun vardı. Çözüm, tüm bağımlılıkları tip sağlayıcıya birleştirmek için ILMerge kullanmaktı. https://github.com/fsharp/fsharpx/issues/91

    +0

    Bu ilmerge msbuild hedefi olarak eklemek yararlı olur. Bu yeni hedef, mevcut projelere bir nugget ile eklenebilir. – nicolas

    İlgili konular