我制作了一个小型 C# 应用程序,其中包含 1 个解决方案和 2 个项目 ( test1
, test2
)。第一个项目有两个文件Program.cs
,function1.cs
而第二个项目只包含Program2.cs
. 项目test1
创建.exe
文件,并test2
创建.dll
文件。问题是当我尝试在 VS 创建 .csproj 时构建它时它运行良好,但是当我尝试编辑该 .csproj (或编写我自己的)以实现增量构建时(就像在 MS 网站上的示例一样)它会抛出一个CS0246
找不到类型或命名空间名称“类型/命名空间”(您是否缺少 using 指令或程序集引用?)
尽管如此,我首先将引用添加到test2.csproj
,然后添加到.dll
它创建的引用,并且还使用了该using
指令。
当我尝试在命令提示符下运行时会出现同样的错误,
csc.exe program.cs function1.cs
但可以通过添加/:r
with来快速修复.dll
,例如:
\csc.exe program.cs function1.cs /r:test2.dll
然后它运行良好。我只是不知道如何确认文件之间引用的 msbuild。而且我还被迫使用 cmd 而不是在 VS 中构建它。
下面我放了我在项目中使用的代码。
这是我在末尾添加的片段,test1.csproj
以强制它进入增量构建:
<ItemGroup>
<Compile Include="function1.cs" />
<Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup>
<Target Name="program2">
<MSBuild Projects="..\test2\test2.csproj" />
<Message Text="Target program 2" />
</Target>
<Target Name="Compile" Inputs="@(Compile)" Outputs="$(OutputPath) $(AssemblyName).exe" DependsOnTargets="program2">
<Message Text="Target program 1" />
<MakeDir Directories="$(OutputPath)" Condition="!Exists('$OutputPath)')" />
<Csc Sources="@(Compile)" OutputAssembly="$(OutputPath)$(AssemblyName).exe" />
</Target>
这是代码Program.cs
:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace test1
{
class Program
{
static void Main(string[] args)
{
int a;
int b;
string pause;
function1 var = new function1();
a = Convert.ToInt32(Console.ReadLine());
b = var.funkcja1(a);
Console.WriteLine(b);
pause = Console.ReadLine();
}
}
}
这是function1.cs
:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using test2;
namespace test1
{
class function1
{
public int funkcja1(int a)
{
int b;
Program2 p2 = new Program2();
b = p2.program2(a);
return (b);
}
}
}
这是代码Program2.cs
:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace test2
{
public class Program2
{
public class function2
{
public int funkcja2(int a)
{
return (a + 1);
}
}
public int program2(int c)
{
int d;
function2 var = new function2();
d = var.funkcja2(c) + 1;
return (d);
}
public static void Main(string[] args)
{
string pause;
pause = Console.ReadLine();
}
}
}