我正在使用Bundle Transformer在MVC5项目中进行少量编译.My LESS包包含一个main.less文件,用于导入位于子文件夹中的其他文件.一些文件包含对图像文件的引用,如下所示 - 这在文件中/css/structure/header.less:
.site__logo {
background: url('../img/logo.png') no-repeat;
// ...
}
Run Code Online (Sandbox Code Playgroud)
在编译的bundle(/css/lessBundle)中,这变为:
background: url('/css/img/logo.png') no-repeat;
Run Code Online (Sandbox Code Playgroud)
我希望.less文件中的相对路径在捆绑时保留,以便正确指向/img/logo.png,而不是/css/img/logo.png.我认为Bundle Transformer负责转换相对路径 - 文档有这一段,但没有详细说明:
您还需要了解当您插入CssTransformer和JsTransformer类的实例时,然后插入一组转换(在调试和预缩小版本的文件之间选择,从中间语言转换代码,运行时代码缩小,相对转换绝对路径(仅用于CSS代码)和代码组合).一组转换取决于您安装的Bundle Transformer的模块和您在Web.config文件中指定的设置.
这是我的BundleConfig:
public class BundleConfig
{
public const string LessBundlePath = "~/css/lessBundle";
public static void RegisterBundles(BundleCollection bundles)
{
var nullBuilder = new NullBuilder();
var cssTransformer = new CssTransformer();
var nullOrderer = new NullOrderer();
// Skip JS-related stuff
var lessBundle = new Bundle(LessBundlePath)
.Include("~/css/main.less");
lessBundle.Builder = …Run Code Online (Sandbox Code Playgroud) 在ASP.NET Core中,您可以通过在Startup.cs(docs)中包含此行来验证所有非GET请求:
services.AddMvc(options => options.Filters.Add(new AutoValidateAntiforgeryTokenAttribute()));
Run Code Online (Sandbox Code Playgroud)
但是,如果按类型添加过滤器(使用typeof或使用泛型Add<T>方法),则验证似乎不起作用:
// Doesn't work
services.AddMvc(options => options.Filters.Add(typeof(AutoValidateAntiforgeryTokenAttribute));
// Doesn't work either
services.AddMvc(options => options.Filters.Add<AutoValidateAntiforgeryTokenAttribute>());
Run Code Online (Sandbox Code Playgroud)
请参阅https://github.com/davidgruar/GlobalFilterDemo以获得最小的repro.
这里发生了什么?
我手动为mvc5应用程序添加了单元测试.这是我的业务逻辑
public void AddTreatments(TreatmentView model)
{
using(var treatment = new TreatmentRepository())
{
var treat = new PhysiqueData.ModelClasses.Treatment()
{
treatmentID = model.treatmentID,
treatmentCost = model.treatmentCost,
treatmentDuration = model.treatmentDuration,
treatmentName = model.treatmentName
}
treatment.Insert(treat);
}
}
Run Code Online (Sandbox Code Playgroud)
这是我在服务层中使用的存储库
public class TreatmentRepository:ITreatmentRepository
{
private ApplicationDbContext _datacontext;
private readonly IRepository<Treatment> _treatmentRepository;
public TreatmentRepository()
{
_datacontext = new ApplicationDbContext();
_treatmentRepository = new RepositoryService<Treatment>(_datacontext);
}
public void Insert(Treatment model)
{
_treatmentRepository.Insert(model);
}
}
Run Code Online (Sandbox Code Playgroud)
下一个代码是我对我的治疗的实际单位测试,它不起作用,我可以得到一些指导.我搜索了很多东西,仍然无法做到正确.
[TestClass]
public class UnitTest1
{
[TestMethod]
public void AddingTreatmenttodatabase()
{
//var business = …Run Code Online (Sandbox Code Playgroud) 我正在使用FsUnit 2.1(使用NUnit 3.2)为F#项目编写测试.这是一个简单的模块:
namespace Library1
module LibraryFunctions =
let Execute f1 = f1()
let Id x = x
Run Code Online (Sandbox Code Playgroud)
这是我的测试:
namespace Tests
open FsUnit
open NUnit.Framework
open Library1
[<TestFixture>]
type Tests() =
[<Test>]
// Passes
member x.``LibraryFunctions.Id should return the value``() =
LibraryFunctions.Id 42 |> should equal 42
[<Test>]
// Fails
member x.``LibraryFunctions.Execute should return the result of the function``() =
let f() = 42
LibraryFunctions.Execute f |> should equal 42
Run Code Online (Sandbox Code Playgroud)
第二次测试失败(在NCrunch和ReSharper中),并显示以下消息:
System.MissingMethodException : Method not found: '!!0 Library1.LibraryFunctions.Execute(Microsoft.FSharp.Core.FSharpFunc`2<Microsoft.FSharp.Core.Unit,!!0>)'.
如果我将测试模块放在与测试相同的代码文件中(而不是在单独的VS项目中),则测试通过.我怀疑这是由于NUnit和F#/ C#interop的一些问题.如果是这样,怎么解决?