蝈蝈俊.net

-- 用随笔来记录自己的技术感触

   博客堂 :: 首页 :: 联系 :: RSS 2.0 ::
随笔 - 665, 评论 - 4861, 引用 - 276

导航

关于

这里是我的技术Blog,下一代CSDN社区Blog在 http://blog.csdn.net/ghj1976/

标签

每月存档

最新留言

广告

汗颜,今天才发现Framework 2.0 版可再发行组件包不包括操作GAC的工具

今天在服务器上外部发布新站点 http://groups.csdn.net/ 时候,在服务器上竟然找不到 Microsoft .NET Framework 2.0 Configuration   菜单项。

对比其他机子,发现 Microsoft .NET Framework 2.0 Configuration 菜单项指向的是类似如下的目录:

"C:\Program Files\Microsoft.NET\SDK\v2.0 64bit\Bin\    而公司服务器上,C:\Program Files\Microsoft.NET 这个目录根本不存在。查进入后,发现公司服务器上装的是:

Microsoft .NET Framework 2.0 版可再发行组件包 (x86)

http://www.microsoft.com/downloads/details.aspx?displaylang=zh-cn&FamilyID=0856eacb-4362-4b0d-8edd-aab15c5e04f5

也就是24M的那个版本,这个版本不包含GAC操作的工具。

你如果需要有GAC操作的工具等工具,你可以继续装开发工具包。也就是如下版本:

Microsoft .NET Framework 2.0 软件开发工具包 (SDK) (x86)

http://www.microsoft.com/downloads/details.aspx?familyid=FE6F2099-B7B4-4F47-A244-C96D69C35DEC&displaylang=zh-cn

这个版本有425M,当然你安装的时候,你可以只选择装其中的工具,例子和帮助文档不装。

posted on 2006-11-29 19:26:00 by ghj1976  评论(8) 阅读(8420)

Visual Studio 2005 项目模版丢失时候的解决方案

Visual Studio 2005 SP1 Beta 发布的时候,由于错按了一个按钮,一直没能下载,最近看到 VS2005 SP1 Beta 可以直接下载了,就下载了一个进行安装。

Visual Studio 2005 SP1 Beta 的下载地址在:http://www.microsoft.com/downloads/details.aspx?familyid=8D702463-674B-4978-9E22-C989130F6553&displaylang=en

在安装 Visual Studio 2005 SP1 Beta 之前,如果你安装过任何额外的补丁,比如:Microsoft Visual Studio 2005 Web Application Projects 。或者 Update for Microsoft Visual Studio 2005 Team Suite - ENU(kb915364)。

你需要先卸载这些补丁或者插件,然后再安装。

如果你没有卸载完整,安装后,你可能发现新建项目的时候,有一些项目模版没有了。

解决方案:

按照以下顺序,打开 VS2005 的命令行工具

Start --> All Progarms --> Microsoft Visual Studio 2005 --> Visual Studio Tools --> Visual Studio 2005 Command Prompt

然后执行如下命令:

devenv.exe /InstallVSTemplates

需要注意的事情是,这个命令执行后,不会马上出现项目或项模板,需要有段时间来处理。
如果马上打开 Visual Studio 2005 , 你可以发现项目或者项模版一个都没有,稍过一下,就出现了。

参考资料:

http://blog.joycode.com/scottgu/archive/2006/10/10/84899.aspx

http://support.microsoft.com/kb/916651/zh-cn

http://msdn2.microsoft.com/zh-cn/library/ms241279(VS.80).aspx

posted on 2006-11-24 10:44:00 by ghj1976  评论(10) 阅读(10396)

判断操作系统是32位还是64位,并根据版本调用不同方法的一个脚本例子

之前我写的一篇博客中提到 InstallUtil.exe 安装有时候需要考虑操作系统是32 位或 64 位的。 这时候,我们安装脚本文件就可以采用下述写法:
这个脚本,稍加修改,就可以用于我们项目的生成事件,让每次编译服务后,自动给我们部署,方便我们调试。

@echo off

if not exist "%SystemRoot%\Microsoft.NET\Framework64\v2.0.50727\InstallUtil.exe" goto x32
goto x64

:x32
echo x32
"%SystemRoot%\Microsoft.NET\Framework\v2.0.50727\InstallUtil.exe" MyWindowsService.exe
goto :eof

:x64
echo x64
"%SystemRoot%\Microsoft.NET\Framework64\v2.0.50727\InstallUtil.exe" MyWindowsService.exe
goto :eof

参考资料:
64位电脑下,注册表操作的一些注意事项

posted on 2006-11-22 18:43:00 by ghj1976  评论(3) 阅读(10313)

Warning:The file '*****' could not be added to the project. A file with the same path already exists in the project.的解决方案

最近作的项目中,不知道是啥步骤的操作,造成编译时候,会有以下警告:

Warning 1 The file 'ui\scripts\System\Web\Forms\MzLockWindow.js' could not be added to the project. A file with the same path already exists in the project.
Warning 2 The file 'ui\scripts\System\Web\Forms\MzModalDialog.js' could not be added to the project. A file with the same path already exists in the project.
Warning 3 The file 'ui\scripts\System\Web\Forms\MzEffect.js' could not be added to the project. A file with the same path already exists in the project.

最初到 ui\scripts\System\Web\Forms\ 目录下,对应的这三个文件都很正常, 删除这三个文件,再添加,仍然是这个错误。

分析进去后才发现,是项目文件 WebSite.csproj 文件中出问题了.

在项目文件中,可以看到如下的信息:

<Content Include="ui\scripts\System\Web\Forms\MzLockWindow.js" />
<Content Include="ui\scripts\System\Web\Forms\MzLockWindow.js" />
<Content Include="ui\scripts\System\Web\Forms\MzModalDialog.js" />
<Content Include="ui\scripts\System\Web\Forms\MzModalDialog.js" />

项目文件配置中了同一个文件重复出现,所以才会报上述警告。

解决方案很简单。在项目文件中删除多余的那个,就搞定了。

posted on 2006-11-22 18:34:00 by ghj1976  评论(2) 阅读(7597)

64位电脑下,注册表操作的一些注意事项

如果64位Window操作系统中,执行32位程序,对注册表进行增加操作.

比如你代码中写的操作是操作
HKEY_LOCAL_MACHINE\SOFTWARE\HongjunGuo\MyDemo
实际他操作的是
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\HongjunGuo\MyDemo

比如:
我们写了这样一个服务程序。其中安装部分代码中包含如下代码:

RegistryKey key1 = Registry.LocalMachine.CreateSubKey(@"SOFTWARE\HongjunGuo\MyDemo");
if (key1 == null) return;
key1.SetValue("ApplicationPath", Directory.GetCurrentDirectory());
key1.Close();

我们执行如下代码进行安装:
"%SystemRoot%\Microsoft.NET\Framework\v2.0.50727\InstallUtil.exe" MyWindowsService.exe

安装后,就会发现上述问题。注册表项不是在你想要得位置。

如果想是你所在的位置,这时候你应该执行
"%SystemRoot%\Microsoft.NET\Framework64\v2.0.50727\InstallUtil.exe" MyWindowsService.exe


posted on 2006-11-13 15:24:00 by ghj1976  评论(6) 阅读(8623)

注册表操作的一个小细节

先看一个有错误的代码:

string subKeyName = @"Software\Microsoft\Windows\CurrentVersion\Run\"; //subkey name
string valueName = @"App Name"; //name of the more specific key that will hold the value, "" means (Default) try { RegistryKey reg = Registry.LocalMachine.OpenSubKey(subKeyName); if (reg != null) { reg.DeleteValue(valueName); reg.Close(); } } catch (Exception ex) { MessageBox.Show(this, ex.ToString()); }
执行这段代码,你可以会收到以下异常:
System.UnauthorizedAccessException
原因很简单:
RegistryKey.OpenSubKey (String) 
以只读方式检索子项
public RegistryKey OpenSubKey (
 string name,
 bool writable
)
writable
如果需要项的写访问权限,则设置为 true。
我们需要带第二个参数,标示我们是可写方式打开的。

posted on 2006-11-12 14:46:00 by ghj1976  评论(2) 阅读(1288)

如何卸载用Installutil /u无法卸载的服务?

我们在用.net 开发Window Service 时,有时候,由于开发阶段,会频繁的修改代码,就经常会发现用Installutil /u 卸载不干净服务,进而影响我们的开发调试。

这时候,我们可以用另外一个命令来卸载,如下:

C:\WINDOWS\system32>sc delete MyService

其中的 MyService 是你的服务的名字,比如如下的服务截图,它的卸载命令就可以如下写:

一个 Window Service 

sc delete "郭红俊的定时工作服务"

当然你也可以用这个工具create,start,stop服务。比如,我们就可以用下面的命令,安装服务,并把服务启动起来。

installutil HongjunGuo.JobsWindowsService.exe
sc start "郭红俊的定时工作服务"

相关参考资料:

windows里非.net服务的删除
http://www.chinageren.com/jc/HTML/126076.html

posted on 2006-11-12 14:29:00 by ghj1976  评论(10) 阅读(12698)

TSQL 中 用 CONVERT 函数转换日期成字符串的一个小注意点

最近我这里收到一个bug ,某些时候,日期显示的时候,竟然丢了秒。
查进去代码后,发现是 CONVERT 函数参数使用错误的问题。
CONVERT 函数参数如下:
CONVERT ( data_type [ ( length ) ] , expression [ , style ] )
其中第三个参数就是定义转换的风格:
比如如下 TSQL 语句:
select ltrim(rtrim(CONVERT(varchar(50),getdate())))
select ltrim(rtrim(CONVERT(varchar(50),getdate(),120)))
它的执行效果就应该是如下格式(不论你的操作系统是中文或者英文).
Nov 10 2006 3:58PM
2006-11-10 15:58:48
有关这个参数更详细的说明,请看 MSDN
或者以下这个链接:
http://msdn2.microsoft.com/zh-cn/library/ms187928.aspx

posted on 2006-11-10 16:12:00 by ghj1976  评论(2) 阅读(7701)

企业服务组件接口被定义在其他项目中,变更接口导致错误:Unable to cast COM object to interface 的解决方案

企业服务组件类的接口被定义在另外一个项目中,变更接口时候,导致错误:Unable to cast COM object of type 'System.__ComObject' to interface type 'I***' 的解决 方案

最近在完善兴趣小组的开发,企业服务这里,由于遵循谋个接口,而这个接口,会按照 需求,时不时发生变化。

但是一旦发生修改。经常会报类似如下的错误信息:

这个修改后,在 Component Services 中删除这个企业服务,在GAC中删除这个企业服 务组件以及这个组件所引用的组件,之后,重起电脑,你会发现,下述错误仍然存在。

An exception of type 'System.InvalidCastException' occurred in mscorlib.dll but was not handled in user code Additional information: Unable to cast COM object of type 'System.__ComObject' to interface type 'ICommunityUserDataManager'. This operation failed because the QueryInterface call on the COM component for the interface with IID '{F70232A8-7959-3AE5-8643-3E0C0869D507}' failed due to the following error: Error loading type library/DLL. (Exception from HRESULT: 0x80029C4A (TYPE_E_CANTLOADLIBRARY)).

解决方法:

你定义的接口附带以下几个Attribute。

[ComVisible(true)]
[Guid("470418D8-E53C-4890-BD88-F6AC660C3162")]
public interface ICommunityUserDataManager
{
}

如果你把某个接口修改后,顺便把这个接口的Guid的Attribute进行修改,就不会出现 上述错误了。

另外,注意,不要把接口所在项目的ComVisible属性打开

即,我们应该是:[assembly: ComVisible(false)]

更多信息请参考我之前整理的一篇博客:

企业服务组件类的接口被定义在另外一个项目中可能会出现的一种错误

http://blog.joycode.com/ghj/archive/2006/10/24/85602.aspx

?

posted on 2006-11-07 16:07:00 by ghj1976  评论(7) 阅读(6695)

对象数组的 Copy

先看一段代码:

        public class CSLink
        {
            private string name;
            public string Name
            {
                get { return name; }
                set { name = value; }
            }
        }
        static void Main(string[] args)
        {
            CSLink[] links_01 = new CSLink[2];
            links_01[0] = new CSLink();
            links_01[0].Name = "guohongjun";
            links_01[1] = new CSLink();
            links_01[1].Name = "hhhhh";

            CSLink[] links_02 = new CSLink[2];

            // 几种复制调用
            //links_01.CopyTo(links_02, 0);
            Array.Copy(links_01, links_02, links_01.Length);

            links_02[0].Name = "111123213213213";
            links_02[1].Name = ".002135";

            foreach (CSLink ll in links_01)
            {
                Console.WriteLine(ll.Name);
            }
            foreach (CSLink ll in links_02)
            {
                Console.WriteLine(ll.Name);
            }
            Console.ReadLine();
        }        
        

不论是那种复制,你都会看到,结果中links_01和links_02完全一样。

原因:
数组中每一项的对象是引用类型的,所以数组其实也就是引用数组。
不管你怎么复制,其实都是对象引用被复制了。

除非:
1。数组每一项的对象有深层复制支持,同时,你的数组复制每一项的时候,对每一项的复制调用的是深层复制;
2。数组每一项的对象是值类型。

注意的是:
数组的CopyTo对数组本身来说就是深层复制。
虽然有些时候,并不是我们期望的结果。

posted on 2006-11-06 12:55:00 by ghj1976  评论(5) 阅读(6017)