小编Car*_*ema的帖子

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>
Run Code Online (Sandbox Code Playgroud)

如果我尝试从.csproj和.nuspec文件的目录运行nuget.exe包My.Project.csproj,我得到

无效的程序集引用'Third.Party.dll'.确保lib目录中存在名为"Third.Party.dll"的文件.

我创建了.\ lib.\ bin\Debug\lib.\ obj\lib

并且文件位于所有三个位置.它真的想要lib文件夹在哪里?

nuget nuget-package

36
推荐指数
2
解决办法
2万
查看次数

NHibernate QueryOver子查询

我看过类似的问题,但找不到简单的解释.我本可以错过它,但我保证我看了.实际上我甚至找不到一篇文章,除了一篇博文文章,它快速掩盖了一切,并假设你熟悉其他形式的NH.

鉴于之间的多对多,Program并且Topic后者处于层次结构中Topics,我想要检索Programs给定的所有内容Topic,可能包括其子主题.由于程序可能列在给定父主题的多个子主题下,我需要使用子查询或处理必须使用distinct(并且简单的方法TransformUsing(Transformers.DistinctRootEntity)不起作用).

原始SQL应该是这样的

SELECT ProgramId, Title, bar, baz, foo FROM Programs 
WHERE ProgramId IN 
 (SELECT ProgramId from Program_Topics WHERE TopicId IN (1, 2, ...))
Run Code Online (Sandbox Code Playgroud)

结果将转换为模型类型以传输到视图.我最初的尝试是这样的:

ProgramDTO pDTO = null;

/* topicIds is List<int> passed into function */

var query = Session.QueryOver<Program>()
.JoinQueryOver<Topic>(p => p.Topics)
.WhereRestrictionOn(pt => pt.Id).IsInG<int>(topicIds)     
.TransformUsing(Transformers.DistinctRootEntity)
.SelectList(list => list
        .Select(program => program.Id).WithAlias(() => pDTO.Id)
        .Select(program => program.Title).WithAlias(() => pDTO.Title)
        .Select(program => program.Location).WithAlias(() => pDTO.Location)
        .Select(program => …
Run Code Online (Sandbox Code Playgroud)

nhibernate queryover

9
推荐指数
2
解决办法
2万
查看次数

流利的NHibernate - 不必要的更新

在这两者之间单向许多一对多的关系,RegistrationItem,其中RegistrationISet<Item> ItemsPurchasedItem没有回头参考注册(它不是探索对象图的有效方式),当我看着SQL生成,我见

INSERT INTO Registrations_Items (RegistrationId, ItemId) VALUES (@p0, @p1);@p0 = 1 [Type: Int32 (0)], @p1 = 1 [Type: Int32 (0)]
UPDATE Items SET Price = @p0, Name = @p1, [...], ListIndex = @p5, EventId = @p6 WHERE ItemId = @p7
Run Code Online (Sandbox Code Playgroud)

传递给更新的参数是正确的,但没有关于Item的更改,因此不需要更新.

映射是通过使用此覆盖自动执行Registration而不是覆盖Item.DB Schema看起来完全正确.我删除了所有约定并再次测试,并且行为仍然存在,因此我的映射约定并不是这样做的.

mapping.HasManyToMany(e => e.ItemsPurchased).AsSet().Cascade.All().Not.Inverse();

为什么NHibernate会打这个UPDATE电话,我该怎么做才能阻止它呢?它并没有真正伤害任何东西,但它表明我做错了什么,所以我想弄明白什么.

编辑: 根据下面的评论,我创建了一个单元测试,它创建了一个Event(Item必须属于一个Event),Items向它添加两个,从会话中清除第一个并刷新会话,然后通过其ID获取第一个返回.

我在下面的SELECT项目行中注意到一些奇怪的东西(从下到下)

INSERT INTO Events (blah blah …
Run Code Online (Sandbox Code Playgroud)

nhibernate nhibernate-mapping fluent-nhibernate fluent-nhibernate-mapping

7
推荐指数
1
解决办法
1128
查看次数

NuGet Pack:忽略默认包含

这是从我平时了解,这是人们试图让包含在NuGet包文件相反的问题.我试图阻止文件被自动包含.

我创建的预编译的MVC视图模板(使用RazorGenerator.Mvc),库.less文件,并根据需要JavaScript来支持这些.我们的想法是,这些是进入我们所有网站的基本内容.

默认情况下,nuget pack包括项目中标记为Build Action:Content的任何文件,这些文件是新创建的视图,.less文件或脚本.似乎没有选项可以覆盖此行为.这里的一个相关问题提出了一个<files>节点.nuspec的解决方案,以阻止所有包含,但我想包含一些文件,只包括我选择的文件.

现在,作为权宜之计,我可以通过,明确地将所有内容设置为内容(使用None代替),然后显式设置我执行和不希望复制的文件以及我希望它们使用该.nuspec文件复制到哪里.但是,如果另一个开发人员出现,例如我未来的自己,并忘记了这一步骤,那么新添加的文件将被复制到包中,然后在下次安装或更新期间进入目标项目.

我找到了OctoPack,一旦检测到一个<files>节点就默认不包括任何内容.nuspec,但我没有使用TeamCity中的任何其他内容,并重写我的构建服务器脚本以了解如何调用OctoPack而不是nuget pack doesn'打击我是一个很好的选择.OctoPack也有局限性; 必须手动列出依赖项,必须在命令行上传入.nuspec文件的替换标记(而不是从AssemblyInfo.cs),它似乎并不是这个工具用于此用途 - 他们甚至说"OctoPack应该只安装在你要部署的项目上 - 这意味着控制台应用程序项目,Windows服务项目和ASP .NET Web应用程序.不会选择单元测试,类库和其他支持项目." (OctoPack文档)

我尝试的下一个替代方法是msbuildBeforeBuild事件期间简单地清除内容组:

<Target Name="BeforeBuild">
    <ItemGroup>
      <Content Remove="**\*.*" />
      <None Include="**\*.*" />
    </ItemGroup>
  <Message Text="Content files: @(Content)" Importance="High" />
</Target>
Run Code Online (Sandbox Code Playgroud)

该消息验证内容组是否为空,但nuget …

msbuild nuget nuget-package

7
推荐指数
1
解决办法
1051
查看次数

流利的NHibernate - IndexOutOfRange

我已阅读所有帖子并知道IndexOutOfRange通常会发生,因为列被引用了两次.但我根据我的映射看不出这是怎么回事.如果配置中的SHOW_SQL为true,我会看到Events表中的Insert ,然后IndexOutOfRangeExceptionRadioButtonQuestions表引用的表.我看不到它试图使用的SQL会产生异常.我尝试使用AutoMapping,现在已经切换到ClassMap这两个类的完全,以尝试缩小问题范围.

public class RadioButtonQuestion : Entity
{
    [Required]
    public virtual Event Event { get; protected internal set; }

    [Required]
    public virtual string GroupIntroText { get; set; }
}

public class Event : Entity
{
    [Required]
    public virtual string Title { get; set; }

    [Required]
    public virtual DateTime EventDate { get; set; }

    public virtual IList<RadioButtonQuestions> RadioButtonQuestions { get; protected internal set; }
}




public class RadioButtonQuestionMap : ClassMap<RadioButtonQuestion>
{
    public RadioButtonQuestionMap() …
Run Code Online (Sandbox Code Playgroud)

nhibernate fluent-nhibernate nhibernate-3 fluent-nhibernate-mapping

5
推荐指数
2
解决办法
5735
查看次数

ServiceLocator未在测试项目中初始化

当我尝试编写与我的新任务(MVC3,S#arp 2.0)相关的测试时,我在尝试运行测试时遇到此错误:

MyProject.Tests.MyProject.Tasks.CategoryTasksTests.CanConfirmDeleteReadiness:SetUp:System.NullReferenceException:ServiceLocator尚未初始化; 我试图检索SharpArch.NHibernate.ISessionFactoryKeyProvider ----> System.NullReferenceException:对象引用未设置为对象的实例.

在SharpArch.NHibernate.NHibernateRepositoryWithTypedId的SharpArch.Domain.SafeServiceLocator 1.GetService() at SharpArch.NHibernate.SessionFactoryKeyHelper.GetKeyFrom(Object anObject) at SharpArch.NHibernate.NHibernateRepositoryWithTypedId2.get_Session()2.Save(T entity) at MyProject.Tests.MyProject.Tasks.CategoryTasksTests.Setup() in C:\code\MyProject\Solutions\MyProject.Tests\MyProject.Tasks\CategoryTasksTests.cs:line 36 --NullReferenceException at Microsoft.Practices.ServiceLocation.ServiceLocator.get_Current() at SharpArch.Domain.SafeServiceLocator1.GetService()

其他不涉及新类的测试(例如,生成/确认数据库映射)正确运行.

我的ServiceLocatorInitializer如下

public class ServiceLocatorInitializer
{

public static void Init() 
{
    IWindsorContainer container = new WindsorContainer();

        container.Register(
                Component
                    .For(typeof(DefaultSessionFactoryKeyProvider))
                    .ImplementedBy(typeof(DefaultSessionFactoryKeyProvider))
                    .Named("sessionFactoryKeyProvider"));

    container.Register(
            Component
                .For(typeof(IEntityDuplicateChecker))
                .ImplementedBy(typeof(EntityDuplicateChecker))
                .Named("entityDuplicateChecker"));

    ServiceLocator.SetLocatorProvider(() => new WindsorServiceLocator(container));
}
}
Run Code Online (Sandbox Code Playgroud)

nunit s#arp-architecture asp.net-mvc-3

1
推荐指数
1
解决办法
4042
查看次数