Xaml 通过NuGet软件包访问的程序集不';不包括一节课

Xaml 通过NuGet软件包访问的程序集不';不包括一节课,xaml,uwp,nuget,nuget-package,uwp-xaml,Xaml,Uwp,Nuget,Nuget Package,Uwp Xaml,我创建的一个通用类库(UWP)项目有两个类 一,。 public bool可视性转换程序——负责将bool转换为XAML可视性的IValueConverter,反之亦然 二,。 一个publiccustomcontrol模板化控件,其模板(在Themes\Generic.xaml(下面的项目结构)中定义)使用上述BoolToVisibilityConverter 其模板如下所示 <Border ...> <Border.Resources> <

我创建的一个通用类库(UWP)项目有两个类

一,。
public bool可视性转换程序
——负责将
bool
转换为XAML
可视性
IValueConverter
,反之亦然

二,。 一个
publiccustomcontrol
模板化控件,其模板(在
Themes\Generic.xaml
(下面的项目结构)中定义)使用上述
BoolToVisibilityConverter

其模板如下所示

<Border ...>
    <Border.Resources>
        <local:BoolToVisibilityConverter x:Key="BoolToVisibilityConverter" />
    </Border.Resources>
    <Grid ...>
        <Grid ...
            Visibility="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Value, Converter={StaticResource BoolToVisibilityConverter}}" />
    </Grid>
</Border>
该文件是使用nuget CLI版本4.3.0.4406的
nuget.exe spec
命令生成的

为了生成NuGet包,我首先删除了
bin
obj
文件夹,并在
Release(任意CPU)
配置中构建了项目,这在
bin
文件夹中生成了以下结构

然后,我使用命令
NuGet.exe pack RefClassLibrary.nuspec
NuGet\
文件夹中为类库生成了NuGet包,该文件夹生成了一个结构如下的
nupkg
文件

问题:通过NuGet包使用类库 在一个新的通用Windows应用程序项目中,我运行了
安装包
命令,并将
nupkg
的绝对路径作为参数,在Visual Studio中的Package Manager控制台中安装生成的包

在构建项目之后(没有错误),我将以下XAML添加到一个新的空白页面

<Page ...
    xmlns:rcl="using:RefClassLibrary">
    <Grid ...>
        <rcl:CustomControl Width="200" Height="200" Value="True"/>
    </Grid>
</Page>

在对象浏览器中查看
RefClassLibrary
时,如错误所示,
booltVisibilityConverter
类确实不存在

直接使用类库 我使用
卸载包RefClassLibrary
命令从项目中删除包

然后,我使用命令
7z x RefClassLibrary.1.0.0.nupkg-oot
解压
nupkg
文件,将其解压到文件夹
Out
,并通过解决方案资源管理器添加引用,直接引用项目中
Out\lib\uap10.0\
文件夹中包含的
dll
这使它工作得非常完美
booltVisibilityConverter
确实显示在对象浏览器中

这个问题应该如何解决?
正确的程序集包含在NuGet软件包中,尽管它的某些部分(?)没有“导入”到项目中…

当通过
Install-package
Cmdlet安装NuGet软件包时,据我所知,这就是NuGet所做的

  • 将检索要安装的软件包的标识符和版本号。它通过指定的参数(在未指定版本号的情况下,默认为最新的“稳定”版本)或通过读取它指向的包的内容来实现

  • .nupkg
    文件和与包关联的一些其他资产被复制到
    %USERPROFILE%\.nuget\packages\{identifier}{version}\
    文件夹中并缓存在其中

  • 然后,将在您所在的Visual Studio项目中提取并安装该包

  • 当您再次安装同一软件包的同一版本时,NuGet将使用位于上述文件夹中的缓存文件,而不是重新下载它们


    问题中描述的问题源于我没有增加NuGet软件包的版本号。

    我在我的机器上分两步开发了库项目

  • 我最初仅使用
    CustomControl
    创建了库项目,生成了库包,并将其安装在外部应用程序项目中

  • 之后,我添加了
    BoolToVisibilityConverter
    ,重新生成了库包,并将其重新安装到应用程序项目中

  • .nuspec
    文件中指定的包的版本号(
    1.0.0
    )在第一步和第二步之间没有增加,因此,步骤2中生成的新包没有被NuGet使用,因为具有相同标识符和版本号的包已经缓存在
    %USERPROFILE%\.NuGet\packages\

    这就解释了为什么(请参考对问题的评论)(谢谢!)

    因此,解决方案是

  • 增加
    .nuspec
    文件中的版本号,或者

  • 删除位于
    %USERPROFILE%\.nuget\packages
    文件夹中与包(或其版本)对应的文件夹


  • …之后,您将重新生成具有相同版本号的库软件包,并将其安装到应用程序项目中。

    我测试了您的nuget软件包,无法重现您的问题。你的vs版本是什么?我使用了visual studio 2017,15.3.5对回复延迟表示歉意@SunteenWu MSFT我记不清我使用的Visual Studio的确切版本,但我更新到2017社区
    15.4.1
    ,问题仍然存在。
    <Page ...
        xmlns:rcl="using:RefClassLibrary">
        <Grid ...>
            <rcl:CustomControl Width="200" Height="200" Value="True"/>
        </Grid>
    </Page>