2

我正在尝试csc.exe从命令行使用来编译 .NET 1.1 .csproj 项目。它失败并出现以下错误:

MyProject.csproj(24,2046):错误 CS1034:超出编译器限制:行不能超过 2046 个字符

.csproj 文件的第 24 行是节点的PostBuildEvent属性。<Settings>我确实有一个超过 2046 个字符的冗长的构建后事件。

这个项目是一个遗留应用程序,已经成功编译了 8 年以上,直到 2-6 周前都没有出现任何问题。(最后一次为我成功编译是在 6 周前,然后我直到几周前才再次尝试,从那以后一直失败。)我尝试删除当时已安装的所有服务包框架,它并没有改变结果。我不知道从这里去哪里。

编辑:

使用下面 Eric J 的建议,我通过将一些命令移动到外部 .bat 文件然后像这样调用它们来缩短构建后事件。现在,当我尝试运行 csc.exe 时,我收到以下错误:

MyProject.csproj(491,35):错误 CS1010:常量换行

MyProject.csproj(1,1):错误 CS0116:命名空间不直接包含字段或方法等成员

项目文件的第 491 行是<Folder RelPath = "Xml\" />,当然第 1 行是<VisualStudioProject>.

这就像它试图编译我的 .csproj 文件,就好像它是一个 .cs 文件一样。为什么?我这样调用 csc.exe :

csc.exe /t:library /out:transformed\Services\bin\Services.dll *.cs Cache\*.cs Settings\*.cs transformed\Services\*.cs /r:MyReference.dll /r:MySecondReference.dll /nologo /debug /define:DEBUG

是否因为某种原因*.cs突然包括在内?MyProject.csproj如果是这样,我将如何解决这个问题?

编辑2:

我想出了一个解决方法。从上面的命令行语句可以看出,我正在编译*.cs,它与.csproj文件在同一目录中。我有一种预感,由于某种原因,它还试图编译项目文件,就好像它是 C# 代码一样。我将根目录中的所有 C# 源文件移动到一个名为 的文件夹Services中,然后将我的命令行语句更改为 compile Services\*.cs。现在一切正常。

我仍然不知道是什么导致这种行为最近发生了变化,所以如果有人有一些见识,我将不胜感激。

4

2 回答 2

1

我不确定什么会导致构建后事件突然失败,但您可以通过创建一个批处理文件或 PowerShell 脚本来封装冗长的事件并调用该脚本来解决该问题。

于 2013-10-07T18:11:59.040 回答
0

这是我认为已经发生的事情。在后期构建中,您有一个宏,例如$(TargetPath). 您可能会更改项目所在的位置,并且路径$(TargetPath)变得很长。尝试将您的构建移动到一些简单的目录,例如“C:\build”,看看它是否会编译。

然后,如果没有成功,请尝试使用 devenv.exe 作为命令行或仅在 Visual Studio 中编译您的项目。如果这不起作用,请尝试重新格式化您的构建后事件,以使行更短。

于 2013-10-07T18:19:13.657 回答