如果.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世界中生存的最佳实践或指南.
我赞成每个"答案"一个问题/技巧,因此可以轻松地评论/更新/引用. - 随意给几个"答案".
我也将分享自己的知识作为这个问题的答案.
在Dotnet2.0及更高版本中,如果其中一个依赖(静态引用)的dll丢失,程序将拒绝启动.
使用Dotnet1.1和1.0,程序启动但稍后在尝试使用缺少的程序集的功能时崩溃.
我想知道是否有类似的东西
允许我在某些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
我的 Android 应用程序当前包含 170 个不同字符串的 18 个翻译,范围从 6/170 翻译到 170/170 翻译。
对于非英语应用程序用户来说,如果实际上只有 3% 的字符串被真正翻译,那么告诉该应用程序以 xx 语言提供是没有意义的。
我的问题:是否可以告诉 android-studio 或 gradle 我不希望语言 xx 包含在最终的 apk 中而不删除源树中的现有翻译?
我想排除翻译率低于 65% 的语言
也可以看看
我想编写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?),但这会为项目创建一个额外的依赖项.
第三好的是某种异常处理.
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) 更新:重新制定了问题和标题:
我一直认为可以通过询问日志记录是否处于活动状态来优化昂贵的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) 我总是得到一个空指针异常,即使我在这段代码上连接到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
有没有一种简单的方法从java转换Map<String,Object>为android.content.ContentValues?
android.content.ContentValues 用于android数据库编程,以将数据库行的数据保存为名称 - 值对.
背景:
我尝试将现有Android应用程序的businesslogic移植到j2se-swing-app
我的目标是拥有特定于android的代码和android独立代码,这些代码进入一个单独的lib,可以被android和swing-gui使用.
目前我正在分析
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
我是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来自哪里?这是一个等待命令的男性用品吗?我没有找到任何明确的定义.
我有一个可能分配大量数据的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) android ×5
.net ×4
c# ×2
java ×2
32bit-64bit ×1
assemblies ×1
attributes ×1
debugging ×1
gradle ×1
inputstream ×1
junit ×1
locale ×1
logging ×1
memory-leaks ×1
sample ×1
sql-server ×1
sqlite ×1
stream ×1
stringwriter ×1
t-sql ×1
translation ×1