I have some javascript that I'm compiling with Microsoft's jsc.exe compiler into a .NET assembly. I would like to set some assembly metadata, such as the file version, but it is unclear to me how to do that.
How can I set these assembly-level attributes in JScript.NET?
import System.Reflection;
[assembly: AssemblyCompanyAttribute("Your Company")]
[assembly: AssemblyCopyrightAttribute("Copyright Your Company 2014")]
[assembly: AssemblyDescriptionAttribute("Description")]
[assembly: AssemblyFileVersionAttribute("1.0.0")]
[assembly: AssemblyProductAttribute("Blah blah")]
[assembly: AssemblyTitleAttribute("Title")]
[assembly: AssemblyTrademarkAttribute("Trademark Your Company 2014")]
[assembly: AssemblyVersionAttribute("1.0.0")]
Related
I am trying to create an azure function program with a service bus queue trigger template using a csx file. But I am having issues resolving dependencies. To be honest, i am very confused about the project structure that is mentioned in [this doc] (https://learn.microsoft.com/en-us/azure/azure-functions/functions-reference-csharp). I've tried two approaches.
First approach...
Create a folder named MyAzureFunc in a visual studio code and manually add a function.json , project.json, project.lock.json, and run.csx. Then, outside of the MyAzureFunc folder I add a host.json and local.settings.json. This approach leads to dependency issues.
Second approach...
Create an Azure Function project with service bus queue template in visual studio code that generates a completely different folder and project structure. I'll then remove most of the auto-generated files and manually add in the structure mentioned in the first approach. This still leads to dependency issues.
Some possible reasons i believe this could be happening is the following...
1. Framework versions - my project.json calls for "net46", but when i create an azure function in visual studio code using the service bus queue template it implements "netcoreapp2.1"
2. The need to run some command to recognize the package dependencies
3. Some project configuration needed to work with csx
I believe the important file here is the project.json. Below is the code...
{
"frameworks": {
"net46":{
"dependencies": {
"MongoDB.Driver": "2.6.1",
"MongoDB.Driver.Core": "2.6.1",
"MongoDB.Bson": "2.6.1",
"SharpZipLib": "0.86.0",
"RabbitMQ.CLient": "5.0.1"
}
}
}
}
Below is the code for the packages i'm trying to use in my csx file...
#r "Newtonsoft.Json"
#r "Microsoft.ServiceBus"
using System;
using System.IO;
using System.Text;
using System.Threading.Tasks;
using Microsoft.ServiceBus.Messaging; --> ERROR
using Newtonsoft.Json; --> ERROR
using MongoDB.Driver; --> ERROR
using MongoDB.Bson; --> ERROR
using MongoDB.Bson.IO; --> ERROR
using RabbitMQ.Client; --> ERROR
using ICSharpCode.SharpZipLib.Zip.Compression.Streams; --> ERROR
**In CodeRunner Version 3.0.1 not detecting separate C# class files in same folder **
Example following will compile
using System;
public class Person {
}
class Student : Person {
}
But if both each class has it's own file and in the same folder then the compiler reports:
The type or namespace name `Person' could not be found. Are you missing an assembly reference?
Anyone any idea as how to sort this ?
When compiling multiple C# files within CodeRunner, You must list your assembly files prior to the compilation by defining them ALL in your "Run Settings" under the "Compile Flags":
ex.
/reference:System.Drawing ICar.cs M3.cs
Hope this helps 👍🏽
note:
ICar.cs and M3.cs are my custom classes
I've tried to come up with a better title but can't.
The issue is I am new to Azure functions but have made a simple one work that writes to a SQL Azure table. Now I've attempted to build the simplest kind of Entity Framework based Datalayer and uploaded it. Right now it is compiled as .Net 4.6 and using EF 6.1.3.
I'm using a connection string as per the second answer here Second answer and have checked it is being retrieved correctly. Update - I also used this guide.
Removing this {#r "D:\home\site\wwwroot\sharedbin\TestDataLayer.dll"} causes the editor to complain about missing assemblies, so it IS finding the dll in question.
However it will not run - it cannot find TestDataLayer.dll.
I'm only running this in the portal editor (I've not yet mastered deployment direct from a Visual Studio Project - don't laugh :P).
#r "System.Configuration"
#r "System.Data.Entity"
#r "D:\home\site\wwwroot\sharedbin\TestDataLayer.dll"
using System;
using System.Collections;
using System.Configuration;
using System.Collections.Generic;
using System.Data.Entity;
using System.Data.Entity.ModelConfiguration.Conventions;
using System.Data.Entity.SqlServer;
using System.Threading.Tasks;
using System.ComponentModel.DataAnnotations;
using System.Net;
using TestDataLayer;
public static void Run(TimerInfo myTimer, TraceWriter log)
{
var connection = ConfigurationManager.ConnectionStrings["sql_connection"].ConnectionString;
using(var db = new SyncDbContext(connection))
{
var RK = new RKAzureTest() {TestField1 = "It finally worked?" };
db.RKAzureTests.Add(RK);
db.SaveChanges();
}
}
[DbConfigurationType(typeof(myDBContextConfig))]
public partial class SyncDbContext : System.Data.Entity.DbContext
{
public SyncDbContext(string cs) : base(cs) {}
public DbSet<RKAzureTest> RKAzureTests {get;set;}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
// modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
}
}
public class myDBContextConfig : DbConfiguration
{
public myDBContextConfig()
{
SetProviderServices("System.Data.EntityClient",
System.Data.Entity.SqlServer.SqlProviderServices.Instance);
SetDefaultConnectionFactory(new System.Data.Entity.Infrastructure.SqlConnectionFactory());
}
}
This is the function.json:
{
"frameworks": {
"net46":{
"dependencies": {
"EntityFramework": "6.1.3"
}
}
}
}
I've compiled the dll itself to .Net 4.6 after a suspicion that the Azure Functions don't support .net 4.7.1 and via Kudu uploaded the compiled dll to a sharedbin folder (checked the path a dozen times!).
This is the error thrown up:
2018-05-01T11:00:00.012 [Warning] Unable to find assembly 'TestDataLayer, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'. Are you missing a private assembly file?
2018-05-01T11:00:00.012 [Error] Exception while executing function: Functions.TimerTriggerCSharp1. mscorlib: Exception has been thrown by the target of an invocation. f-TimerTriggerCSharp1__514732255: Could not load file or assembly 'TestDataLayer, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. The system cannot find the file specified.
Not quite sure what else can be left - I'm using runtime version 1.0.11702 in the Application settings as I found life got a LOT more complicated if I went onto the Beta version.
If anyone can point me to a working guide for this use case (Database first, EF 6.1.3 etc) I'd be grateful.
Any help offered gratefully received!
Thank you :)
Go to Azure Portal, create a folder called, 'bin' inside your Azure functions using CMD Shell, upload the 'TestDataLayer.dll' file to bin folder which has just been created.
#r "System.Configuration"
#r "System.Data.Entity"
#r "TestDataLayer.dll"
Project structure should look like,
AzureFunctionProjectName001
bin
TestDataLayer.dll
run.csx
project.json
project.lock.json
...
Azure functions should be able to discover your library this time. I believe, EntityFramework works just fine.
I was playing with NuGet so I created a project, wrote two simple functions (multiply and add), packaged it with the following spec:
<metadata>
<id>Math</id>
<version>1.0.0.0</version>
<title>$title$</title>
<authors>$author$</authors>
<owners>$author$</owners>
<requireLicenseAcceptance>false</requireLicenseAcceptance>
<description>$description$</description>
<copyright>Copyright 2015</copyright>
<tags>Matematica, Test</tags>
</metadata>
Then publicized it on my local NuGet.Server feed, added my new nuget package in another sample project, started it and it returns this:
Could not load file or assembly 'Math, Version=1.0.0.0, Culture=en-GB, PublicKeyToken=null' or one of its dependencies. The system cannot find the file specified.
Googled for various time but found nothing (was I the only dumb enough to call a temporary package 'Math'?), so I imagined that somewhat my module name was taboo, changed it into Math_Test, same source code and it worked like a charm.
Is there some more informations out there that specifies which values are taboo?
I can't find anything on nuget official documentation.
The class Math is specified in the following dll (mscorlib.dll) so it doesn't even have the same id...
#region Assembly mscorlib.dll, v4.0.0.0
// C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5\mscorlib.dll
#endregion
EDIT:
And here is the code of the sample application
using Math;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
int a = -1;
try
{
Common e = new Math.Common();
a = e.Multiply(3, 2);
}
catch (Exception e)
{
System.Console.Out.Write(e);
}
System.Console.Out.Write(a);
System.Console.Read();
}
}
}
Seems like the problem was not the name but the Culture inside the Assembly (which is not the same as the language specified into Nuget spec.
Changing the AssemblyCulture from
[assembly: AssemblyCulture("en-GB")]
to
[assembly: AssemblyCulture("")]
solved the issue.
I found the warning by toggling diagnostic output during build, as suggested by #ShyamalDesai
CSC : warning CS1607: Assembly generation -- Referenced assembly 'Math' has different culture setting of 'en-GB'
I'm running Pex 1.4.40602.0. When I try to run Pex on an internal" type I get a "The selected type is not visible and cannot be run by Pex." error dialog. I have tried to place the following commands in my Assembly.cs file, but all to no avail:
[assembly: InternalsVisibleTo("Groucho.Generic.Tests")]
[assembly: InternalsVisibleTo("Groucho.Generic.Moles")]
[assembly: InternalsVisibleTo("Groucho.Generic.Explorables")]
Any help in this regard would be greatly appreciated....