WindowsのLAN Manager認証レベルを変更して対応しました。
2014年12月23日火曜日
2014年12月18日木曜日
ファイルまたはアセンブリ 'Microsoft.SqlServer.Management.Sdk.Sfc, Version=11.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91'、またはその依存関係の 1 つが読み込めませんでした。指定されたファイルが見つかりません。
下記の4つのモジュールを追加にインストールして対応した。
2012SharedManagementObjects_x86
2012SharedManagementObjects_x64
2012SQLSysClrTypes_x64
2012SQLSysClrTypes_x86
参考
ダウンロードページについて
http://www.experts-exchange.com/Database/MS-SQL-Server/Q_28458757.html
↓
ダウンロードモジュールについて
http://www.advancesharp.com/blog/1113/could-not-load-file-or-assembly-microsoft-sqlserver-management-sdk-sfc
2012SharedManagementObjects_x86
2012SharedManagementObjects_x64
2012SQLSysClrTypes_x64
2012SQLSysClrTypes_x86
参考
ダウンロードページについて
http://www.experts-exchange.com/Database/MS-SQL-Server/Q_28458757.html
↓
ダウンロードモジュールについて
http://www.advancesharp.com/blog/1113/could-not-load-file-or-assembly-microsoft-sqlserver-management-sdk-sfc
2014年12月10日水曜日
Disposeのテストについて
▼Controllernのコード
protected override void Dispose(bool disposing)
{
if (disposing)
{
db.Dispose();
}
Debug.WriteLine("Dispose disposing=" + disposing);
base.Dispose(disposing);
}
▼単体テストのコード
[TestMethod]
public void Dispose()
{
ApiBeginController controller = new ApiBeginController();
controller.Dispose();
System.GC.WaitForPendingFinalizers();
}
⇒これでコードカバレッジが100%となりました。
Assert.AreEqualでプリミティブ型の配列のチェックが出来ない??あれ?
Assert.AreEqual に失敗しました。<System.String[]> が必要ですが、<System.String[]> が指定されました。
▼エラー
Microsoft.VisualStudio.TestTools.UnitTesting.AssertFailedException はユーザー コードによってハンドルされませんでした。
HResult=-2146233088
Message=Assert.AreEqual に失敗しました。<System.String[]> が必要ですが、<System.String[]> が指定されました。
Source=Microsoft.VisualStudio.QualityTools.UnitTestFramework
StackTrace:
場所 Microsoft.VisualStudio.TestTools.UnitTesting.Assert.HandleFail(String assertionName, String message, Object[] parameters)
場所 Microsoft.VisualStudio.TestTools.UnitTesting.Assert.AreEqual[T](T expected, T actual, String message, Object[] parameters)
場所 Microsoft.VisualStudio.TestTools.UnitTesting.Assert.AreEqual[T](T expected, T actual)
場所 WebApplication.Tests.Controllers.ApiBeginControllerTest.GET() 場所 d:\dev\sample\20141119_WebMVC\20141128_WebApplication\WebApplication.Tests\Controllers\ApiBeginControllerTest.cs:行 33
InnerException:
▼使用しているコード
Web API(ApiControllerのメソッド)
// GET api/ApiBegin
public IEnumerable<string> Get()
{
return new string[] { "value1", "value2" };
}
テストクラス
[TestMethod]
public void GET()
{
//List<string> expected = new List<string> { "value1", "value2" };
//var expected = new String[] { "value1","value2"};
IEnumerable<string> expected = new String[] { "value1", "value2" };
ApiBeginController controller = new ApiBeginController();
//string[] ret = controller.Get() as string[];
IEnumerable<string> ret = controller.Get() as IEnumerable<string>;
Assert.AreEqual(expected, ret);
//Assert.AreEqual(expected, new string[] { "value1", "value2" });
//Assert.AreEqual(expected, expected); //成功
//Assert.AreEqual(ret, ret); //成功
}
⇒CollectionAssertがあるのですね。。。。
[TestMethod]
public void GET()
{
var expected = new String[] { "value1","value2"};
ApiBeginController controller = new ApiBeginController();
string[] ret = controller.Get() as string[];
CollectionAssert.AreEqual(expected, ret);
}
▼エラー
Microsoft.VisualStudio.TestTools.UnitTesting.AssertFailedException はユーザー コードによってハンドルされませんでした。
HResult=-2146233088
Message=Assert.AreEqual に失敗しました。<System.String[]> が必要ですが、<System.String[]> が指定されました。
Source=Microsoft.VisualStudio.QualityTools.UnitTestFramework
StackTrace:
場所 Microsoft.VisualStudio.TestTools.UnitTesting.Assert.HandleFail(String assertionName, String message, Object[] parameters)
場所 Microsoft.VisualStudio.TestTools.UnitTesting.Assert.AreEqual[T](T expected, T actual, String message, Object[] parameters)
場所 Microsoft.VisualStudio.TestTools.UnitTesting.Assert.AreEqual[T](T expected, T actual)
場所 WebApplication.Tests.Controllers.ApiBeginControllerTest.GET() 場所 d:\dev\sample\20141119_WebMVC\20141128_WebApplication\WebApplication.Tests\Controllers\ApiBeginControllerTest.cs:行 33
InnerException:
▼使用しているコード
Web API(ApiControllerのメソッド)
// GET api/ApiBegin
public IEnumerable<string> Get()
{
return new string[] { "value1", "value2" };
}
テストクラス
[TestMethod]
public void GET()
{
//List<string> expected = new List<string> { "value1", "value2" };
//var expected = new String[] { "value1","value2"};
IEnumerable<string> expected = new String[] { "value1", "value2" };
ApiBeginController controller = new ApiBeginController();
//string[] ret = controller.Get() as string[];
IEnumerable<string> ret = controller.Get() as IEnumerable<string>;
Assert.AreEqual(expected, ret);
//Assert.AreEqual(expected, new string[] { "value1", "value2" });
//Assert.AreEqual(expected, expected); //成功
//Assert.AreEqual(ret, ret); //成功
}
⇒CollectionAssertがあるのですね。。。。
[TestMethod]
public void GET()
{
var expected = new String[] { "value1","value2"};
ApiBeginController controller = new ApiBeginController();
string[] ret = controller.Get() as string[];
CollectionAssert.AreEqual(expected, ret);
}
エラー 6 アセンブリ 'WebApplication, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' は、参照されているアセンブリ 'System.Web.Http, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' よりも新しいバージョンを含む 'System.Web.Http, Version=5.2.2.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' を使用します d:\dev\sample\20141119_WebMVC\20141128_WebApplication\WebApplication\bin\WebApplication.dll WebApplication.Tests
WebアプリのSystem.Web.Httpが5.2.2.0
単体テストプロジェクトのSystem.Web.Httpが4.0.0.0
で困っている
web.application
D:\dev\sample\20141119_WebMVC\20141128_WebApplication\packages\Microsoft.AspNet.WebApi.Core.5.2.2\lib\net45\System.Web.Http.dll
web.test
C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5.1\System.Web.dll
ということで、テストアプリの参照設定にweb.applicationが追加しているdllを追加して対応しました。
これでテストがすんなりと実行できました。
本来は、web.applicationと同じやり方でSyste.Web.Httpのバージョンを上げる必要があるとは思うのですが、どうやったんだろう??
単体テストプロジェクトのSystem.Web.Httpが4.0.0.0
で困っている
web.application
D:\dev\sample\20141119_WebMVC\20141128_WebApplication\packages\Microsoft.AspNet.WebApi.Core.5.2.2\lib\net45\System.Web.Http.dll
web.test
C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5.1\System.Web.dll
ということで、テストアプリの参照設定にweb.applicationが追加しているdllを追加して対応しました。
これでテストがすんなりと実行できました。
本来は、web.applicationと同じやり方でSyste.Web.Httpのバージョンを上げる必要があるとは思うのですが、どうやったんだろう??
2014年12月9日火曜日
ブラックボックスな処理の解析について
.net frameworkのアプリケーションであれば、逆コンパイルしてロジックをおえますが、ネイティブであれば、プロセスモニタを使用します。
using Microsoft.Win32;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
//存在するレジストリキー
キー検索(@"SOFTWARE\Microsoft\.NETFramework");
//存在しないレジストリキー
キー検索(@"SOFTWARE\Microsoft\.NETFrameworkHogeHoge");
//存在しないファイル
ファイルアクセス(@"o:\readme.txt");
//存在しないファイル
ファイルアクセス(@"o:\hogehoge.txt");
}
private static void ファイルアクセス(string fileName)
{
try
{
Debug.WriteLine(File.ReadAllText(fileName));
}
catch (Exception ex)
{
Debug.WriteLine(ex.ToString());
//throw;
}
}
private void キー検索(string p)
{
// 操作するレジストリ・キーの名前
string rKeyName = p;
// 取得処理を行う対象となるレジストリの値の名前
string rGetValueName = "InstallRoot";
// レジストリの取得
try
{
// レジストリ・キーのパスを指定してレジストリを開く
RegistryKey rKey = Registry.LocalMachine.OpenSubKey(rKeyName);
// レジストリの値を取得
string location = (string)rKey.GetValue(rGetValueName);
// 開いたレジストリ・キーを閉じる
rKey.Close();
// コンソールに取得したレジストリの値を表示
Console.WriteLine(location);
}
catch (NullReferenceException)
{
// レジストリ・キーまたは値が存在しない
Console.WriteLine("レジストリ[" + rKeyName
+ "]の[" + rGetValueName + "]がありません!");
}
}
}
}
using Microsoft.Win32;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
//存在するレジストリキー
キー検索(@"SOFTWARE\Microsoft\.NETFramework");
//存在しないレジストリキー
キー検索(@"SOFTWARE\Microsoft\.NETFrameworkHogeHoge");
//存在しないファイル
ファイルアクセス(@"o:\readme.txt");
//存在しないファイル
ファイルアクセス(@"o:\hogehoge.txt");
}
private static void ファイルアクセス(string fileName)
{
try
{
Debug.WriteLine(File.ReadAllText(fileName));
}
catch (Exception ex)
{
Debug.WriteLine(ex.ToString());
//throw;
}
}
private void キー検索(string p)
{
// 操作するレジストリ・キーの名前
string rKeyName = p;
// 取得処理を行う対象となるレジストリの値の名前
string rGetValueName = "InstallRoot";
// レジストリの取得
try
{
// レジストリ・キーのパスを指定してレジストリを開く
RegistryKey rKey = Registry.LocalMachine.OpenSubKey(rKeyName);
// レジストリの値を取得
string location = (string)rKey.GetValue(rGetValueName);
// 開いたレジストリ・キーを閉じる
rKey.Close();
// コンソールに取得したレジストリの値を表示
Console.WriteLine(location);
}
catch (NullReferenceException)
{
// レジストリ・キーまたは値が存在しない
Console.WriteLine("レジストリ[" + rKeyName
+ "]の[" + rGetValueName + "]がありません!");
}
}
}
}
mbbservice.exeがレジストリを頻繁にアクセスする
e-mobileを繋げた時に入ったサービスのようです。
サービスを削除しました。
削除方法
C:\ProgramData\MobileBrServ\Uninstall.exe
を実行して対応した。
サービスを削除しました。
削除方法
C:\ProgramData\MobileBrServ\Uninstall.exe
を実行して対応した。
2014年12月4日木曜日
ASP.NET Identity パスワード制限の変更について
制限がきついのでパスワードのルールを変更しました。
ところで、6桁未満が入力できない。
manager.PasswordValidator = new PasswordValidator
{
//ここは0しても6文字以上を求められるし、1にしても6文字以上が求められる
//TODO:バグでは?
RequiredLength = 1,
RequireNonLetterOrDigit = false,
RequireDigit = false,
RequireLowercase = false,
RequireUppercase = false,
};
ここを修正して1桁もOKとなりました。
public class RegisterViewModel
{
[Required]
[EmailAddress]
[Display(Name = "電子メール")]
public string Email { get; set; }
[Required]
[StringLength(100, ErrorMessage = "{0} の長さは {2} 文字以上である必要があります。", MinimumLength = 6)]
[DataType(DataType.Password)]
[Display(Name = "パスワード")]
public string Password { get; set; }
[DataType(DataType.Password)]
[Display(Name = "パスワードの確認入力")]
[Compare("Password", ErrorMessage = "パスワードと確認のパスワードが一致しません。")]
public string ConfirmPassword { get; set; }
}
public class ResetPasswordViewModel
{
[Required]
[EmailAddress]
[Display(Name = "電子メール")]
public string Email { get; set; }
[Required]
[StringLength(100, ErrorMessage = "{0} の長さは {2} 文字以上である必要があります。", MinimumLength = 6)]
[DataType(DataType.Password)]
[Display(Name = "パスワード")]
public string Password { get; set; }
[DataType(DataType.Password)]
[Display(Name = "パスワードの確認入力")]
[Compare("Password", ErrorMessage = "パスワードと確認のパスワードが一致しません。")]
public string ConfirmPassword { get; set; }
public string Code { get; set; }
}
登録:
投稿 (Atom)