小编k3b*_*k3b的帖子

.NET,"任何CPU/64位(x64)/ 32位(x86)"最佳实践,提示和技巧

如果.NET程序直接或间接需要调用平台相关/本机/非托管代码,它可能会崩溃.

在我购买了安装了Windows 7 64位的新笔记本电脑并尝试使用SQLite数据库进行开发之后,我想到了这个32位/ 64位主题.

System.Data.SQLite包含托管代码和非托管代码.有一个32位版本和一个64位,都有相同的文件名但不同的大小,你的EXE必须使用正确的.

为了使它更复杂:我的Visual Studio 2010调试器是一个32位应用程序,所以当使用GAC的 "System.Data.SQLite-64bit"时我无法调试!

作为.NET开发人员,我们需要指南/技术诀窍/最佳实践.

收集此类信息的最佳位置是我所知道的这个网站(https://stackoverflow.com/).

所以,请分享您的想法和已知问题,这些问题可以作为在32/64/anyCPU dotnet世界中生存的最佳实践或指南.

我赞成每个"答案"一个问题/技巧,因此可以轻松地评论/更新/引用. - 随意给几个"答案".

我也将分享自己的知识作为这个问题的答案.

.net sample 32bit-64bit

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

即使缺少依赖dll,也要启动exe?

在Dotnet2.0及更高版本中,如果其中一个依赖(静态引用)的dll丢失,程序将拒绝启动.

使用Dotnet1.1和1.0,程序启动但稍后在尝试使用缺少的程序集的功能时崩溃.

我想知道是否有类似的东西

  • 编译开关,
  • 配置选项或
  • 一个dotnet [属性]

允许我在某些dll丢失时启动应用程序.

有没有moidfying源代码是可能的(通过应用一些Attriutes execpt)?

我不想通过程序代码或使用IOC-Framworks手动加载程序集.

更新:使用"静态引用的dll",我的意思与使用反射和Assembly.Loadxxxx()在我自己的程序代码中动态加载dll相反.

更新2010-12-25我在考虑复杂化.感谢来自@erinus的简单解决方案:

我只需要尝试捕获并且它有效:

    using System;
    using System.IO;
    using log4net; // log4net.dll might be missing

    namespace ConsoleAppWithMissingDll
    {
        class Program
        {
            static bool dllIsInstalled = true;
            static void Main(string[] args)
            {
                Console.WriteLine("Hello missing dll");

                try
                {
                    OutputViaLog4Net("hello log4net");
                }
                catch (FileNotFoundException)
                {
                    dllIsInstalled = false;
                    Console.WriteLine("Log4net-dll not found");
                }
                Console.WriteLine("Program continued");
    #if DEBUG
                Console.WriteLine("Press any key to exit");
                Console.ReadKey();
    #endif
            }

            private static void OutputViaLog4Net(string message)
            {

                ILog logger = …
Run Code Online (Sandbox Code Playgroud)

.net compiler-construction configuration attributes assemblies

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

android gradle:如何从 apk 中排除现有的翻译/区域设置?

我的 Android 应用程序当前包含 170 个不同字符串的 18 个翻译,范围从 6/170 翻译到 170/170 翻译。

对于非英语应用程序用户来说,如果实际上只有 3% 的字符串被真正翻译,那么告诉该应用程序以 xx 语言提供是没有意义的。

我的问题:是否可以告诉 android-studio 或 gradle 我不希望语​​言 xx 包含在最终的 apk 中而不删除源树中的现有翻译?

我想排除翻译率低于 65% 的语言

也可以看看

android locale translation gradle

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

如果我的SQL Server实例支持快照,请在C#中查找?

我想编写c#代码来进行快照备份( 如果可用).从SQL Server 2005版开始支持此功能,但仅限于企业版,但不支持Express或Standard版.

我的问题:如果连接的服务器支持快照备份(是Enterprise Edition 2005还是更新版或某种"hasFeature(...)),如何在C#中查找?

我目前的解决方案试图抓住以下代码.

sqlCommand.CommandText = String.Format("CREATE DATABASE {0} ON " +
    (NAME = {1}, FILENAME = \"{2}\" ) AS SNAPSHOT OF {1}",
        databaseBackupName,
        databaseName,
        filenameOfDatabseBackup);
sqlCommand.ExecuteNonQuery();
Run Code Online (Sandbox Code Playgroud)

如果我抓到了,SqlException我认为连接的服务器上没有支持.

但也许可能有其他原因导致失败,尽管数据库支持快照(即某些东西被锁定,连接被破坏,......)

理想的解决方案是sqlCommand.ExecuteNonQuery()找出是否支持该功能.

第二个最好的是如果我必须包含一些可以找到它的额外dll(?sqldmo?),但这会为项目创建一个额外的依赖项.

第三好的是某种异常处理.

.net c# t-sql sql-server

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

为什么DataContractSerializer被截断的StringWriter?

DataContractSerializer如果有异常,我正在使用序列化EF4对象到xml.在我的调试日志中,我可以看到当出现问题时想要的是数据内容.

我有两个版本的代码:一个版本序列化为一个文件,一个版本序列化为一个字符串使用StringWriter.

将大项目序列化到文件时,我获得大约16kb的有效xml.当序列化相同的项目到字符串时,xml在12kb之后被截断.知道导致截断的原因吗?

    ...
    var entity = ....
    SaveAsXml(entity, @"c:\temp\EntityContent.xml"); // ok size about 16100 btes
    var xmlString = GetAsXml(entity); // not ok, size about 12200 bytes

    // to make shure that it is not Debug.Writeline that causes the truncation
    // start writing near the end of the string
    // only 52 bytes are written although the file is 16101 bytes long
    System.Diagnostics.Debug.Writeline(xml.Substring(12200)); 
Run Code Online (Sandbox Code Playgroud)

我的字符串被截断的任何想法?

这是序列化到文件的代码,可以正常工作

  public static void SaveAsXml(object objectToSave, string filenameWithPath)
  {
     string directory = Path.GetDirectoryName(filenameWithPath); …
Run Code Online (Sandbox Code Playgroud)

.net c# serialization datacontractserializer stringwriter

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

android.util.Log中的错误或功能?-Log.isLoggable(DEBUG)= false,但未禁用Log.d()

更新:重新制定了问题和标题:

我一直认为可以通过询问日志记录是否处于活动状态来优化昂贵的android Logging方法

    import android.util.Log;

    if (Log.isLoggable("MyContext", Log.DEBUG))
    {
        Log.d("MyContext", "my logging: " + callExpensiveCalculation());
    }
Run Code Online (Sandbox Code Playgroud)

但是,当使用android 2.2模拟器尝试此操作时,永远不会调用Log.d()。

所以我尝试了这段代码

    Log.v(MY_CONTEXT, "VERBOSE logging is active: " + Log.isLoggable(MY_CONTEXT, Log.VERBOSE));
    Log.d(MY_CONTEXT, "DEBUG logging is active: " + Log.isLoggable(MY_CONTEXT, Log.DEBUG));
    Log.i(MY_CONTEXT, "INFO logging is active: " + Log.isLoggable(MY_CONTEXT, Log.INFO));
    Log.w(MY_CONTEXT, "WARN logging is active: " + Log.isLoggable(MY_CONTEXT, Log.WARN));
    Log.e(MY_CONTEXT, "ERROR logging is active: " + Log.isLoggable(MY_CONTEXT, Log.ERROR));
Run Code Online (Sandbox Code Playgroud)

令我惊讶的是

02-27 19:05:43.015: V/MyContext(334): VERBOSE logging is active: false
02-27 19:05:43.015: D/MyContext(334): DEBUG logging is active: …
Run Code Online (Sandbox Code Playgroud)

debugging logging android

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

Android:ConnectivityManager始终返回null

我总是得到一个空指针异常,即使我在这段代码上连接到wifi:

       ConnectivityManager connectivityManager = (ConnectivityManager)
                context.getSystemService(Context.CONNECTIVITY_SERVICE);
    Log.d("Problem", connectivityManager.getActiveNetworkInfo().toString());
Run Code Online (Sandbox Code Playgroud)

我的权限是:

<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.SEND_SMS" >
</uses-permission>
<uses-permission android:name="android.permission.RECEIVE_SMS" >
</uses-permission>
<uses-permission android:name="android.permission.ACCESS_COARSE_UPDATES" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
<uses-permission android:name="android.permission.CONNECTIVITY_CHANGE" />
Run Code Online (Sandbox Code Playgroud)

我错过了什么:/?我只需要知道他何时连接到wifi点以及何时发生变化.但是连接管理器总是在ActiveNetworkInfo上返回null

android

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

如何把java.util.HashMap转换成android.content.ContentValues?

有没有一种简单的方法从java转换Map<String,Object>android.content.ContentValues

android.content.ContentValues 用于android数据库编程,以将数据库行的数据保存为名称 - 值对.

背景:

我尝试将现有Android应用程序的businesslogic移植到j2se-swing-app

我的目标是拥有特定于android的代码和android独立代码,这些代码进入一个单独的lib,可以被android和swing-gui使用.

目前我正在分析

  • 如果我必须实现一个完整的单独的存储库实现集与大量的冗余代码
  • 或者是否存在可以在(j2se-swing-和android-)存储库实现中使用的公共代码.

Repository-Database-Code依赖于使用的database-field-name-value对android.content.ContentValues.

我认为我的android independat版本可以使用一个HashMap<String,Object>insead ContentValues并创建代码在两者之间进行转换.

Android依赖版本看起来像这样

    // android dependant code in android-app
    class AndroidTimeSliceCategoryRepsitory implements ICategoryRepsitory {

        public long createTimeSliceCategory(final TimeSliceCategory category) {

            // get values from android independant layer
            Map<String, Object> columsToBeInserted = TimeSliceCategorySql.asHashMap(category);

// >>>> this is where i am stuck
            ContentValues androidColumsToBeInserted = DbUtils.asContentValues(columsToBeInserted);

            final long newID = AndroidTimeSliceCategoryRepsitory.DB.getWritableDatabase()
                    .insert(TimeSliceCategorySql.TIME_SLICE_CATEGORY_TABLE, null, androidColumsToBeInserted);
            category.setRowId((int) newID);
            return newID;
        }
    } …
Run Code Online (Sandbox Code Playgroud)

java sqlite android platform-independent database-independent

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

问题libperfservice hotplug/cmd无法打开

我是eclipse和android的新手,我希望我的第一个应用程序在智能手机和ip摄像头之间做一个wifi连接,不幸的是我的应用程序崩溃,如果我想看到相机的流.

我的logcat说:

03-06 18:11:26.879: E/(680): Could not open '/data/data/hotplug/cmd'<br/>
03-06 18:11:26.879: E/(680): error : 2, No such file or directory
Run Code Online (Sandbox Code Playgroud)

[编辑k3b 2017-08-09]

我的andriod-4.4上有同样的问题我的logcat包含这个

08-09 20:38:40.436 1883-2035/? I/libPerfService: 1: set: 1
     [ 08-09 20:38:40.436  1883:0x7f3 E/         ]
     Could not open '/data/data/hotplug/cmd'
     [ 08-09 20:38:40.436  1883:0x7f3 E/         ]
     error : 2, No such file or directory
Run Code Online (Sandbox Code Playgroud)

google"libPerfService"找到的androidStudio日志不起作用

11-02 02:29:48.792 1014-1231/? I/libPerfService: 1: set freq: 1950000
11-02 02:29:48.792 1014-1231/? I/libPerfService: 1: set: 4
Run Code Online (Sandbox Code Playgroud)

发现https://census.tsyrklevich.net/file_permissions//system/lib/libperfservice.so没有说明

有谁知道libPerfService来自哪里?这是一个等待命令的男性用品吗?我没有找到任何明确的定义.

android inputstream stream android-camera

5
推荐指数
0
解决办法
1517
查看次数

如何使java内存泄漏的junit测试通过?

我有一个可能分配大量数据的java类。

我编写了一个 junit 测试,应该检查内存泄漏,类似于下面的代码。

不幸的是测试失败了。

@Test
public void shoudNotMemoryLeak()
{
    Runtime runtime = Runtime.getRuntime();
    // make shure that gc has collected all
    System.gc ();
    System.runFinalization ();

    // memory before creating my sut
    long memoryUsedBefore = runtime.freeMemory();
    long memoryUsedAfter = 0;

    // this consumes memory
    StringBuilder sut = new StringBuilder("hello world");

    // make memory available to gc
    sut = null;

    // make shure that gc has collected all
    System.gc ();
    System.runFinalization ();

    // memory after creating my sut
    memoryUsedAfter = runtime.freeMemory(); …
Run Code Online (Sandbox Code Playgroud)

java junit memory-leaks

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