小编dev*_*lop的帖子

为什么ASP.NET编译器会在每个构建中重建所有二进制文件?

当我使用aspnet_compiler重新编译我的项目(asp.net,c#)时,即使没有进行任何代码更改,重建的二进制文件也会更改(与之前的版本相比).

据我所知,这是因为构建每次构建时都会生成一个新的模块版本ID(guid)(为了区分构建),另一个类似的问题是:我可以在构建时指定模块版本ID(MVID) .net汇编?

上面链接的问题似乎表明没有办法重建一个项目,并且二进制文件与之前构建的相同的未更改的代码相匹配..好吧,很好,我理解 - 但为什么所有的二进制文件都被重建了?

我认为,根据文档(http://msdn.microsoft.com/en-us/library/ms229863(v=vs.80).aspx),除非将-c指定为参数,否则aspnet_compiler应该只重建那些实际需要的二进制文件(由于代码更改).我是误解还是遗漏了什么?

我正在使用的aspnet_compiler参数:

aspnet_compiler -f -u -fixednames -nologo -v / -p .\myproject\ .\mybuild\
Run Code Online (Sandbox Code Playgroud)

请注意,只有WebSite项目才会出现此问题,而不是Web应用程序项目(它们的编译方式不同).即使您创建一个没有功能的WebSite项目和页面,也不会打开它或在构建之间以任何方式更改它,也会出现此问题.

反编译生成的二进制文件显示没有差异.比较两个"相同"构建的二进制文件,每次在同一部分的二进制文件中显示出小的差异 - 我认为这可能与随机构建guid有关.我发现在构建之间没有办法避免这种变化.

.net c# asp.net aspnet-compiler

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

HTML不再适用于JLabel(和其他组件)

我有一个我编写的java applet,并且已经运行了很长一段时间.在applet中,我有一堆在其文本内容中使用HTML的JLabel(这是允许的,并且已经工作多年).我使用HTML的主要原因是允许JLabel中的换行符.

问题:最近,其中包含HTML的JLabel(有些没有)停止显示其文本.我认为它可能与最近的Java更新(2010年10月12日的Java SE 6 Update 22)有关,但不是100%肯定,但问题似乎确实在那时开始.也许已经引入了一个bug?或删除功能?

我尝试使用JEditorPane,当内容为HTML时,似乎也有同样的问题.

另外需要注意的是,第一次加载applet时(第一次启动java运行时)它运行起来很精细,但如果刷新网页则会出现上述问题.

有没有人有类似的问题?有谁有任何见解?或者我只是在做一些愚蠢的事情?

我做了一个非常简单的测试applet,我可以100%规律地重现问题(记住第一次运行时加载它会工作正常,只有连续的刷新会导致问题):

[HelloWorldApplet.java]

import javax.swing.*;

public class HelloWorldApplet extends JApplet
{
    public void init()
    {
        this.add(new JLabel("Hello Everybody (Text)"), java.awt.BorderLayout.NORTH);
        this.add(new JLabel("<html><body>Hello Everybody (HTML)</body></html>"), java.awt.BorderLayout.SOUTH);
    }
}
Run Code Online (Sandbox Code Playgroud)

[HellowWorldApplet.html]

<html>
<title>A Test</title>
<body>
    <applet code="HelloWorldApplet.class" width="320" height="120">
        You need Java
    </applet>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

PS.我一直主要使用Chrome测试,但我也在IE 8中尝试过.此外,我(显然)安装了最新的Java SE 6更新22作为我的运行时间,并具有我的JDK的匹配更新.我使用简单的编译上面的测试applet:"javac HelloWorldApplet.java"

java applet

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

如何:在C#中自动实例化Singleton

我希望有一个Singleton,它将在程序启动时自动实例化.

我所说的"自动实例化"是指Singleton中的代码应该在程序启动时实例化,而不需要其他代码的任何调用或声明.

所以我希望在程序启动时实例化并写出"MySingleton Instantiated"之类的东西(没有主代码做任何事情)...

static class MySingleton
{
    private static MySingleton self = new MySingleton();

    protected MySingleton()
    {
        System.Console.WriteLine("MySingleton Instantiated");
    }
}
Run Code Online (Sandbox Code Playgroud)

除了这不起作用,因为C#只会在需要时初始化类的静态成员,即当它们被访问/等时.

那我该怎么办?可以这样做吗?

我没有亲自使用C++(暂时没有使用C++),但我很确定它可以在C++中完成但不确定C#.

任何帮助表示赞赏.谢谢.


我真正想要做的就是......将会有很多这些单例类(随着时间的推移可以添加更多),所有这些类都将继承自一个公共(抽象)父类(也就是说. PClass).

PClass将有一个静态成员,它是PClasses的集合......以及一个将自己添加到集合中的构造函数......

然后理论上所有的单例都会自动添加到集合中(因为当它们被实例化时,调用基类PClass构造函数并将新对象添加到集合中)...然后可以在不知道任何关于什么子项的情况下使用该集合(已经实现了单例类,并且可以随时添加新的子(单例)类,而无需更改任何其他代码.

不幸的是,我无法让孩子们(单身人士)自我实例化......搞砸了我的小计划,导致了这篇文章.

希望我解释得那么好.


PS.是的,我意识到单身人士和他们的使用有不好的感觉......但有时他们很有用,即使撒旦自己做了单身人士,我仍然想知道我的问题是否能在C#中实现.非常感谢大家.

c# singleton

6
推荐指数
2
解决办法
9439
查看次数

Google跟踪代码管理器内置的Click触发器和shadow-dom的问题

Google跟踪代码管理器(GTM)具有内置的Click触发器,可让您在用户点击内容时触发GTM代码.

我相信它是通过在文档上添加"click"侦听器然后在进行点击时将特殊的"gtm.click"事件推送到dataLayer来实现的.

在推送到dataLayer的'gtm.click'对象中,GTM包含从event.target属性中提取的某些数据,包括目标元素的属性,例如id/class/href.

问题是......

如果你在html中使用shadow-dom,目标/数据将是错误的.这是因为当事件通过阴影 - 边界边界冒泡时,它们"被重新定位为看起来像是来自组件而不是阴影DOM中的内部元素".

如果您在GTM中根据事件目标数据创建标签/触发器/变量,并且您希望该目标是用户实际点击的元素(这看起来很正常),则可能会出现问题.

是否存在已存在的解决方案?

shadow-dom google-tag-manager

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